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;
vector<int> prime_sieve(int n) {
  vector<bool> a(n + 1, 1);
  for (int i = 2; i * i <= n; i++) {
    if (a[i]) {
      for (int j = i * i; j <= n; j += i) a[j] = 0;
    }
  }
  vector<int> res;
  for (int i = 2; i <= n; i++) {
    if (a[i]) res.push_back(i);
  }
  return res;
}
const vector<int> primes = prime_sieve(50000);
map<int, int> factor(int n) {
  map<int, int> f;
  for (int pi = 0, p = 0; pi < primes.size() && primes[pi] * primes[pi] <= n;
       pi++) {
    p = primes[pi];
    while (n % p == 0) {
      n /= p;
      f[p]++;
    }
  }
  if (n != 1) f[n] = 1;
  return f;
}
vector<pair<int, int>> s_factor(int n, int m, int k) {
  map<int, int> f = factor(n);
  f[2]++;
  for (pair<int, int> p : factor(m)) f[p.first] += p.second;
  for (pair<int, int> p : factor(k)) f[p.first] -= p.second;
  vector<pair<int, int>> res;
  for (pair<int, int> p : f) res.push_back(p);
  return res;
}
vector<int> func(int n, int m, int k) {
  vector<pair<int, int>> sf = s_factor(n, m, k);
  vector<vector<int>> pw(sf.size());
  for (int i = 0; i < sf.size(); i++) {
    pw[i].push_back(1);
    for (int j = 0; j < sf[i].second; i++)
      pw[i].push_back(pw[i][j] * sf[i].first);
  }
  vector<int> divs;
  int cd = 1;
  for (int i = 0; i < sf.size(); i++) cd *= sf[i].second + 1;
  for (int i = 0; i < cd; i++) {
    ;
  }
  return {0};
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie();
  cout.tie();
  long long n, m, k;
  cin >> n >> m >> k;
  if ((2 * n * m) % k != 0) {
    cout << "NO\n";
    return 0;
  }
  vector<int> divs;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      divs.push_back(i);
      divs.push_back(n / i);
    }
  }
  for (int i = 1; i * i <= m && i <= n; i++) {
    if (m % i == 0) {
      divs.push_back(i);
      if (m / i <= n) divs.push_back(m / i);
    }
  }
  sort(divs.begin(), divs.end());
  long long s = 2 * (long long)n * (long long)m / (long long)k;
  long long a = 1;
  for (int i = divs.size() - 1; i >= 0; --i) {
    if (s % divs[i] == 0) {
      a = divs[i];
      break;
    }
  }
  if (2 * a <= n && s % (2 * a) == 0) a *= 2;
  if (s / a <= m) {
    cout << "YES\n";
    cout << 0 << ' ' << 0 << '\n';
    cout << a << ' ' << 0 << '\n';
    cout << 0 << ' ' << s / a << '\n';
  } else
    cout << "NO\n";
  return 0;
}
