import java.io.*;
import java.util.*;

public class memory_mb {
    private static int gcd(int a, int b) {
        a = Math.abs(a);
        b = Math.abs(b);
        while (b != 0) {
            int tmp = a % b;
            a = b;
            b = tmp;
        }
        return a;
    }

    private static void myAssert(String msg, boolean exp) {
        if (!exp) {
            throw new AssertionError(msg);
        }
    }

    private static String frac(int n, int d) {
        int g = gcd(n, d);
        return (n / g) + "/" + (d / g);
    }

    private static String connect(int n, int d, int device, int comp) {
        return frac(n, d) + ": Connect " + (device + 1) + " to " + (comp + 1);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("memory.in"));
        StringTokenizer st = new StringTokenizer(in.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        myAssert("n is out of bounds", 1 <= n && n <= 1000);
        myAssert("m is out of bounds", 1 <= m && m <= 1000);
        myAssert("k is out of bounds", 1 <= k && k <= 1000);
        myAssert("extra tokens found", !st.hasMoreTokens());
        in.close();

        PrintWriter out = new PrintWriter("memory.out");
        if (m >= n) {
            out.println(frac(k, 1));
            out.println(n);
            for (int i = 0; i < n; ++i) {
                out.println(connect(0, 1, i, i));
            }
        } else {
            out.println(frac(k * n, m));
            out.println(m + n - 1);
            for (int i = 0; i < m; ++i) {
                out.println(connect(0, 1, i, i));
            }
            for (int i = 1; i < n; ++i) {
                out.println(connect(i * k, m, (i - 1) % m, (m + i - 1) % n));
            }
        }
        out.close();
    }
}
