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 = (int)15e4 + 7;
const int N_ = 1650;
const int MAXN = (int)4e6 + 7;
const int MOD = (int)1e9;
const int INF = (int)2e9;
const int DEL = (int)3e5;
const int LOG = 20;
const int ALPH = 256;
const int DIGIT = 10;
const int BLOCK = 300;
const int LIGHT = 650;
const long long LINF = (int64_t)2e18;
const long double PI = 3.1415926535897932384626433832795;
const long double EPS = 1e-2;
using namespace std;
template <typename T>
T sqr(T a) {
  return a * a;
}
template <typename T>
bool uax(T &a, const T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool uin(T &a, const T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T1, typename T2>
istream &operator>>(istream &in, pair<T1, T2> &p) {
  in >> p.first >> p.second;
  return in;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &out, pair<T1, T2> &p) {
  out << p.first << ' ' << p.second;
  return out;
}
long long n, m, k;
void read() { cin >> n >> m >> k; }
long long gcd(long long a, long long b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
void solve() {
  long long d = gcd(n * m, k);
  if (k / d > 2) {
    cout << "NO";
    return;
  }
  cout << "YES\n";
  cout << "0 0\n";
  if (n % k == 0) {
    cout << 2 * n / k << " 0\n";
    cout << "0 " << m << "\n";
    return;
  }
  if (m % k == 0) {
    cout << "0 " << 2 * m / k << "\n";
    cout << n << " 0\n";
    return;
  }
  if ((n * m) % k != 0) {
    k /= 2;
    long long d1 = gcd(n, k);
    n /= d1, k /= d1;
    long long d2 = gcd(m, k);
    m /= d2, k /= d2;
    cout << n << " 0\n";
    cout << "0 " << m << "\n";
    return;
  }
  long long d1 = gcd(n, k), d2 = gcd(m, k);
  long long x = 2 * n / d1, y = m / d2 * d1 * d2 / k;
  cout << x << " 0\n";
  cout << "0 " << y << "\n";
}
void check_time() {
  double start = clock();
  read(), solve();
  cout << "\nTime is " << (clock() - start) * 1.0 / CLOCKS_PER_SEC << "s\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(20);
  read();
  solve();
}
