On some square in the lowest row of a chessboard a stands a pawn. It has only two variants of moving: upwards and leftwards or upwards and rightwards. The pawn can choose from which square of the lowest row it can start its journey. On each square lay from 0 to 9 peas. The pawn wants to reach the uppermost row having collected as many peas as possible. As there it will have to divide the peas between itself and its k brothers, the number of peas must be divisible by k + 1. Find the maximal number of peas it will be able to collect and which moves it should make to do it.

The pawn cannot throw peas away or leave the board. When a pawn appears in some square of the board (including the first and last square of the way), it necessarily takes all the peas.

Input

The first line contains three integers n, m, k (2 ≤ n, m ≤ 100, 0 ≤ k ≤ 10) — the number of rows and columns on the chessboard, the number of the pawn's brothers. Then follow n lines containing each m numbers from 0 to 9 without spaces — the chessboard's description. Each square is described by one number — the number of peas in it. The first line corresponds to the uppermost row and the last line — to the lowest row.

Output

If it is impossible to reach the highest row having collected the number of peas divisible by k + 1, print -1. 

Otherwise, the first line must contain a single number — the maximal number of peas the pawn can collect given that the number must be divisible by k + 1. The second line must contain a single number — the number of the square's column in the lowest row, from which the pawn must start its journey. The columns are numbered from the left to the right with integral numbers starting from 1. The third line must contain a line consisting of n - 1 symbols — the description of the pawn's moves. If the pawn must move upwards and leftwards, print L, if it must move upwards and rightwards, print R. If there are several solutions to that problem, print any of them.

Examples

Input

3 3 1
123
456
789


Output

16
2
RL


Input

3 3 0
123
456
789


Output

17
3
LR


Input

2 2 10
98
75


Output

-1
import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;

public class Main implements Runnable {
    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private SpaceCharFilter filter;
        private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new InputMismatchException();

            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }

                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }

        public int nextInt() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            int sgn = 1;

            if (c == '-') {
                sgn = -1;
                c = read();
            }

            int res = 0;
            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));

            return res * sgn;
        }

        public long nextLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;

            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }

        public double nextDouble() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.') {
                if (c == 'e' || c == 'E')
                    return res * Math.pow(10, nextInt());
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            if (c == '.') {
                c = read();
                double m = 1;
                while (!isSpaceChar(c)) {
                    if (c == 'e' || c == 'E')
                        return res * Math.pow(10, nextInt());
                    if (c < '0' || c > '9')
                        throw new InputMismatchException();
                    m /= 10;
                    res += (c - '0') * m;
                    c = read();
                }
            }
            return res * sgn;
        }

        public String readString() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isSpaceChar(c));

            return res.toString();
        }

        public boolean isSpaceChar(int c) {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public String next() {
            return readString();
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);
        }
    }

    public static void main(String args[]) throws Exception {
        new Thread(null, new Main(), "Main", 1 << 27).start();
    }

    static class Pair {
        int f;
        int s;
        int p;
        PrintWriter w;

        // int t;

        Pair(int f, int s) {
            // Pair(int f,int s, PrintWriter w){
            this.f = f;
            this.s = s;
            // this.p = p;
            // this.w = w;
            // this.t = t;

        }

        public static Comparator<Pair> wc = new Comparator<Pair>() {
            public int compare(Pair e1, Pair e2) {

                // 1 for swap
                if (Math.abs(e1.f) - Math.abs(e2.f) != 0) {
                    // e1.w.println("**"+e1.f+" "+e2.f);
                    return -1 * (Math.abs(e1.f) - Math.abs(e2.f));
                } else {
                    // e1.w.println("##"+e1.f+" "+e2.f);
                    return (Math.abs(e1.s) - Math.abs(e2.s));
                }

            }
        };
    }

    public static long gcd(long a, long b) {
        if (b == 0)
            return a;
        else
            return gcd(b, a % b);
    }

    //// recursive BFS
    public static int bfsr(int s, ArrayList<Integer>[] a, boolean[] b, int[] pre) {
        b[s] = true;
        int p = 1;
        int n = pre.length - 1;
        int t = a[s].size();
        int max = 1;
        for (int i = 0; i < t; i++) {
            int x = a[s].get(i);
            if (!b[x]) {
                // dist[x] = dist[s] + 1;
                int xz = (bfsr(x, a, b, pre));
                p += xz;
                max = Math.max(xz, max);
            }
        }
        // max = Math.max(max,(n-p));
        pre[s] = max;
        return p;
    }

    //// iterative BFS
    public static int bfs(int s, ArrayList<Integer>[] a, int dist, boolean[] b, PrintWriter w) {
        b[s] = true;
        int siz = 0;
        dist--;
        Queue<Integer> q = new LinkedList<>();
        q.add(s);
        while (q.size() != 0 && dist > 0) {
            int i = q.poll();
            Iterator<Integer> it = a[i].listIterator();
            int z = 0;
            while (it.hasNext() && dist > 0) {
                z = it.next();
                if (!b[z]) {
                    b[z] = true;
                    dist--;
                    // dist[z] = dist[i] + 1;
                    siz++;
                    q.add(z);
                }
            }

        }
        return siz;
    }

    public static int lower(int key, Integer[] a) {
        int l = 0;
        int r = a.length - 1;
        int res = 0;

        while (l <= r) {
            int mid = (l + r) / 2;

            if (a[mid] <= key) {
                l = mid + 1;
                res = mid + 1;
            } else {
                r = mid - 1;
            }
        }

        return res;
    }

    public static long power(long x, long y, long m) {
        if (y == 0)
            return 1;

        long p = power(x, y / 2, m) % m;
        p = (p * p) % m;

        if (y % 2 == 0)
            return p;
        else
            return (x * p) % m;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public void run() {
        // code here
        InputReader sc = new InputReader(System.in);
        PrintWriter w = new PrintWriter(System.out);

        // int t = sc.nextInt();
        // while (t-- > 0) {
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt() + 1;

        int[][][] dp = new int[n][m][k + 1];
        StringBuilder[][][] dp2 = new StringBuilder[n][m][k + 1];

        int[][] a = new int[n][m];
        for (int i = 0; i < n; i++) {
            char[] c = sc.next().toCharArray();
            for (int j = 0; j < m; j++) {
                a[i][j] = c[j] - '0';
                Arrays.fill(dp[i][j], Integer.MIN_VALUE);
                // Arrays.fill(dp2[i][j], new StringBuilder());
            }
        }

        // for (int i = 0; i < n; i++) {
        // for (int j = 0; j < m; j++) {
        // w.println("*" + i + " " + j + "= ");
        // for (int z = 0; z < k; z++) {
        // w.print(dp[i][j][z] + " ");
        // }
        // }
        // }
        // w.println("");
        // for (int i = 0; i < n; i++) {
        // for (int j = 0; j < m; j++) {
        // w.print(a[i][j] + " ");
        // }
        // w.println("");
        // }

        int p = -1;
        int ans = -1;

        for (int i = 0; i < m; i++) {

            int tem = sol(n - 1, i, 0, dp, dp2, a, k, w);
            if (tem % (k) == 0) {
                if (tem > ans) {
                    ans = tem;
                    p = i + 1;
                }
            }
        }
        // for (int i = 0; i < n; i++) {
        // for (int j = 0; j < m; j++) {
        // w.print("*" + i + " " + j + "= ");
        // for (int z = 0; z < k; z++) {
        // w.print(dp[i][j][z] + " ");
        // }
        // w.println("");
        // }
        // }

        if (ans != -1) {
            w.println(ans);
            w.println(p);
            w.println(dp2[n - 1][p - 1][0].reverse());

        } else {
            w.println(-1);
        }

        // }

        w.flush();
        w.close();

    }

    public int sol(int i, int j, int p, int[][][] dp, StringBuilder[][][] dp2, int[][] a, int k, PrintWriter w) {

        if (j >= a[0].length || i < 0)
            return 0;
        // w.println("*" + i + "," + j + "= " + a[i][j] + " " + p);
        if (dp[i][j][p] != Integer.MIN_VALUE)
            return dp[i][j][p];
        if (i == 0) {
            dp2[i][j][p] = new StringBuilder();
            if (a[i][j] % k == (k - p) % k) {
                dp[i][j][p] = a[i][j];
            } else {
                dp[i][j][p] = -1;
            }
        } else {
            int cr = (p + a[i][j]) % k;

            int op1 = -1;
            int op2 = -1;
            char c = 'R';
            if (j != 0) {
                op1 = sol(i - 1, j - 1, cr, dp, dp2, a, k, w);
                // int op12 = 0;// sol(i - 1, j - 1, k - cr, dp, dp2, a, k);
                c = 'L';
                // op1 = Math.max(op11, op12);
            }
            if (j != a[0].length - 1) {
                op2 = sol(i - 1, j + 1, cr, dp, dp2, a, k, w);
                // int op22 = 0;// sol(i - 1, j + 1, k - cr, dp, dp2, a, k);
                c = 'R';
                // op2 = Math.max(op21, op22);
            }

            int max = op2;

            if (op1 > op2) {
                c = 'L';
                max = op1;
            }
            if (max >= 0) {// && (max + a[i][j]) % k == p) {
                dp[i][j][p] = Math.max(0, max) + a[i][j];
                if (c == 'L') {
                    if (dp2[i - 1][j - 1][cr] != null)
                        dp2[i][j][p] = new StringBuilder(dp2[i - 1][j - 1][cr].toString());
                    else
                        dp2[i][j][p] = new StringBuilder();
                    dp2[i][j][p].append(c);
                } else {
                    if (dp2[i - 1][j + 1][cr] != null)
                        dp2[i][j][p] = new StringBuilder(dp2[i - 1][j + 1][cr].toString());
                    else
                        dp2[i][j][p] = new StringBuilder();
                    dp2[i][j][p].append(c);
                }
            } else {
                dp[i][j][p] = max;
            }
        }
        return dp[i][j][p];
    }

}
