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;
inline int read() {
  char ch = getchar(), last = '!';
  int ans = 0;
  while (ch < '0' || ch > '9') last = ch, ch = getchar();
  while (ch <= '9' && ch >= '0') ans = ans * 10 + ch - 48, ch = getchar();
  return (last == '-') ? -ans : ans;
}
const int N = 1000005;
map<long long, int> a;
long long s, n, m, k, sum, b[N][2];
void calc(int n, int v) {
  for (int i = 2; i * i <= n; i++)
    while (n % i == 0) n /= i, a[i] += v;
  if (n > 1) a[n] += v;
}
void dfs(int t, long long x) {
  if (x > n) return;
  if (t > sum) {
    if (s / x <= m) {
      printf("YES\n0 0\n%lld 0\n0 %lld\n", x, s / x);
      exit(0);
    }
    return;
  }
  long long y = 1;
  for (int i = 0; i <= b[t][1]; i++) {
    dfs(t + 1, x * y);
    y *= b[t][0];
  }
}
int main() {
  n = read(), m = read(), k = read();
  if ((long long)n * m * 2 % k) {
    puts("NO");
    return 0;
  }
  a[2] = 1;
  calc(n, 1);
  calc(m, 1);
  calc(k, -1);
  s = n * m * 2 / k;
  for (map<long long, int>::iterator i = a.begin(); i != a.end(); i++)
    if ((*i).second > 0) b[++sum][0] = (*i).first, b[sum][1] = (*i).second;
  dfs(1, 1);
  return 0;
}
