Vasya has got three integers n, m and k. He'd like to find three integer points (x_1, y_1), (x_2, y_2), (x_3, y_3), such that 0 ≤ x_1, x_2, x_3 ≤ n, 0 ≤ y_1, y_2, y_3 ≤ m and the area of the triangle formed by these points is equal to nm/k.

Help Vasya! Find such points (if it's possible). If there are multiple solutions, print any of them.

Input

The single line contains three integers n, m, k (1≤ n, m ≤ 10^9, 2 ≤ k ≤ 10^9).

Output

If there are no such points, print "NO".

Otherwise print "YES" in the first line. The next three lines should contain integers x_i, y_i — coordinates of the points, one point per line. If there are multiple solutions, print any of them.

You can print each letter in any case (upper or lower).

Examples

Input

4 3 3


Output

YES
1 0
2 3
4 1


Input

4 4 7


Output

NO

Note

In the first example area of the triangle should be equal to nm/k = 4. The triangle mentioned in the output is pictured below: 

<image>

In the second example there is no triangle with area nm/k = 16/7.
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int MOD2 = 998244353;
vector<int> bases;
const long long int LLINF = 1ll << 60;
const char en = '\n';
void yes() {
  cout << "YES" << en;
  exit(0);
}
void no() {
  cout << "NO" << en;
  exit(0);
}
template <class T>
void prVec(vector<T> w) {
  cout << w.size() << endl;
  for (int i = 0; i < int(w.size()) - 1; ++i) cout << w[i] << ' ';
  cout << w[w.size() - 1] << endl;
}
long long int raand() {
  long long int a = rand();
  a *= RAND_MAX;
  a += rand();
  return a % (MOD - 7);
}
long long int raaand() { return raand() * (MOD - 7) + raand(); }
string to_upper(string a) {
  for (int i = 0; i < (int)a.size(); ++i)
    if (a[i] >= 'a' && a[i] <= 'z') a[i] -= 'a' - 'A';
  return a;
}
string to_lower(string a) {
  for (int i = 0; i < (int)a.size(); ++i)
    if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 'a' - 'A';
  return a;
}
long long int sti(string a) {
  long long int k = 0;
  for (int i = 0; i < (int)a.size(); ++i) {
    k *= 10;
    k += a[i] - '0';
  }
  return k;
}
string its(long long int k) {
  if (k == 0) return "0";
  string a;
  while (k) {
    a.push_back((k % 10) + '0');
    k /= 10;
  }
  reverse(a.begin(), a.end());
  return a;
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
template <class T, class K>
pair<T, K> mp(T a, K b) {
  return make_pair(a, b);
}
long long int mult(long long int a, long long int b) { return (a * b) % MOD; }
long long int pot(long long int n, long long int k) {
  if (k == 0) return 1;
  long long int a = pot(n, k / 2);
  a = mult(a, a);
  if (k % 2)
    return mult(a, n);
  else
    return a;
}
long long int divide(long long int a, long long int b) {
  return mult(a, pot(b, MOD - 2));
}
long long int sub(long long int a, long long int b) {
  return (a - b + MOD) % MOD;
}
long long int add(long long int a, long long int b) { return (a + b) % MOD; }
bool prime(long long int a) {
  if (a == 1) return 0;
  for (int i = 2; i <= round(sqrt(a)); ++i) {
    if (a % i == 0) return 0;
  }
  return 1;
}
pair<int, int> has(string first) {
  long long int h1 = 0, h2 = 0;
  first = to_lower(first);
  for (char a : first) {
    h1 *= bases[0];
    h1 += a - 'a';
    h1 %= MOD;
    h2 *= bases[1];
    h2 += a - 'a';
    h2 %= MOD2;
  }
  return make_pair(h1, h2);
}
const int N = 300010;
int n, m, k;
long long int a;
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand((long long)new char);
  for (int i = 0; i < 10; ++i) bases.push_back(raand() + 13893829);
  cin >> n >> m >> k;
  int first = gcd(n, k);
  n /= first;
  k /= first;
  int second = gcd(m, k);
  m /= second;
  k /= second;
  if (k > 2) no();
  if (k == 1) {
    if (second > 1)
      m *= 2;
    else if (first > 1)
      n *= 2;
    else
      no();
  }
  cout << "YES" << endl;
  cout << "0 0\n";
  cout << n << ' ' << 0 << endl;
  cout << 0 << ' ' << m << endl;
}
