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>
const int N = 100010;
int tot, Primes[N];
bool isPrime[N];
void Euler_sieve(int n) {
  tot = 0;
  isPrime[1] = false;
  for (int i = 2; i <= n; ++i) isPrime[i] = true;
  for (int i = 2; i <= n; ++i) {
    if (isPrime[i]) Primes[tot++] = i;
    for (int j = 0, d; (d = Primes[j] * i) <= n; ++j) {
      isPrime[d] = false;
      if (i % Primes[j] == 0) break;
    }
  }
}
struct Factor {
  int p, e;
  Factor(int p = 0, int e = 0) : p(p), e(e) {}
};
void Divided_by_Prime(int n, std::vector<Factor>& ve) {
  double f = sqrt(n);
  int t = 0;
  for (int i = 0; Primes[i] <= f && i < N; ++i)
    if (n % Primes[i] == 0) {
      ve.push_back(Factor(Primes[i], 1));
      ++t, n /= Primes[i];
      while (n % Primes[i] == 0) {
        n /= Primes[i];
        ++ve[t - 1].e;
      }
    }
  ve.push_back(Factor(n, 1));
}
long long n, m, k;
int main() {
  std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
  Euler_sieve(N - 1);
  std::cin >> n >> m >> k;
  long long f = (2 * n * m) % k;
  if (f != 0) {
    std::cout << "NO" << std::endl;
    return 0;
  }
  std::cout << "YES" << std::endl;
  long long ori_n = n, ori_m = m, ori_k = k;
  if (k % 2 == 0) k /= 2;
  std::vector<Factor> ve;
  Divided_by_Prime(k, ve);
  for (int i = 0; i < ve.size(); ++i) {
    long long e = ve[i].e, p = ve[i].p, cnt = e;
    for (int j = 0; j < e; ++j)
      if (n % p == 0) {
        n /= p;
        --cnt;
      }
    ve[i].e = cnt;
  }
  for (int i = 0; i < ve.size(); ++i) {
    long long e = ve[i].e, p = ve[i].p, cnt = e;
    for (int j = 0; j < e; ++j)
      if (m % p == 0) {
        m /= p;
        --cnt;
      }
    ve[i].e = cnt;
  }
  if ((ori_k % 2 == 1)) {
    if (n != ori_n)
      n *= 2;
    else
      m *= 2;
  }
  std::cout << "0 0" << std::endl;
  std::cout << n << " 0" << std::endl;
  std::cout << "0 " << m << std::endl;
  return 0;
}
