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;
namespace mine {
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3fll;
long long qread() {
  long long ans = 0;
  char c = getchar();
  int f = 1;
  while (c < '0' or c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while ('0' <= c and c <= '9') ans = ans * 10 + c - '0', c = getchar();
  return ans * f;
}
void write(long long num) {
  if (num < 0) {
    num = -num;
    putchar('-');
  }
  if (num > 9) write(num / 10);
  putchar('0' + num % 10);
}
void write1(long long num) {
  write(num);
  putchar(' ');
}
void write2(long long num) {
  write(num);
  puts("");
}
void chmax(int &x, const int y) { x = x > y ? x : y; }
void chmin(long long &x, const int y) { x = x < y ? x : y; }
const int MAX_N = 2e5 + 10;
const long long MOD = 1e9 + 7;
void add(int &x, int y) {
  x += y;
  if (x >= MOD) x -= MOD;
  if (x < 0) x += MOD;
}
long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x % y); }
void main() {
  long long n = qread(), m = qread(), k = qread();
  long long d = gcd(n * m, k);
  long long b = k / d;
  if (b == 1) {
    puts("YES");
    long long tmp = gcd(n, d);
    long long x = n / tmp, y = m / (d / tmp);
    if (x * 2 <= n)
      printf("0 0\n%lld %lld\n%lld %lld", x * 2, 0ll, 0ll, y);
    else
      printf("0 0\n%lld %lld\n%lld %lld", x, 0ll, 0ll, y * 2);
  } else if (b == 2) {
    puts("YES");
    long long tmp = gcd(n, d);
    n = n / tmp;
    m = m / (d / tmp);
    printf("%lld %lld\n", 0ll, 0ll);
    printf("%lld %lld\n", n, 0ll);
    printf("%lld %lld\n", 0ll, m);
  } else {
    puts("NO");
  }
}
};  // namespace mine
int main() {
  srand(time(0));
  mine::main();
}
