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.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;

public class D {
    String fileName = "";

    public Map<Integer, Integer> factor(int n) {
        Map<Integer, Integer> m = new TreeMap<>();
        for (int i = 2; i * i <= n; i++) {
            while (n % i == 0) {
                m.putIfAbsent(i, 0);
                m.computeIfPresent(i, (k, v) -> v + 1);
                n /= i;
            }
        }
        if (n > 1) {
            m.putIfAbsent(n, 0);
            m.computeIfPresent(n, (k, v) -> v + 1);
        }
        return m;
    }

    public long x = 1;
    public boolean end = false;
    public long s;
    public long n, m, k;

    public List<Map.Entry<Integer, Integer>> factList;

    public void gen(int pos, long a) {
        if (end)
            return;
        if (pos == factList.size()) {
            x = a;
            long y = s / a;
            if (x <= n && y <= m) {
                out.println("YES");
                out.println("0 0");
                out.println("0 " + y);
                out.println(x + " 0");
                end = true;
            }
        } else {
            gen(pos + 1, a);
            for (int i = 1; i <= factList.get(pos).getValue(); i++) {
                if (end)
                    return;
                a *= factList.get(pos).getKey();
                gen(pos + 1, a);
            }
        }
    }

    public void solve() throws IOException {
        n = nextInt();
        m = nextInt();
        k = nextInt();
        if (n == 0 || k == 0) {
            out.println("YES");
            for (int i = 0; i < 3; i++) {
                out.println("0 0");
            }
            return;
        }
        long p = n * m;
        if (p % k == 0 || (k % 2 == 0 && p % k == k / 2)) {
            s = (2L * n * m) / k;
            Map<Integer, Integer> sf = factor((int) n);
            sf.putIfAbsent(2, 0);
            sf.computeIfPresent(2, (key, v) -> v + 1);
            factor((int) m).forEach((key, v) -> {
                sf.putIfAbsent(key, 0);
                sf.computeIfPresent(key, (k2, v2) -> v2 + v);
            });
            factor((int) k).forEach((key, v) -> {
                sf.putIfAbsent(key, 0);
                sf.computeIfPresent(key, (k2, v2) -> v2 - v);
            });
            factList = new ArrayList<>(sf.entrySet());
            gen(0, 1);
        }
        if (!end)
            out.print("NO");
    }

    public void run() throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
        solve();
        br.close();
        out.close();
    }

    BufferedReader br;
    StringTokenizer in;
    PrintWriter out;

    public String nextToken() throws IOException {
        while (in == null || !in.hasMoreTokens()) {
            in = new StringTokenizer(br.readLine());
        }
        return in.nextToken();
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }

    public double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(nextToken());
    }

    public static void main(String... args) throws IOException {
        new D().run();
    }
}
