#include <bits/stdc++.h>
using namespace std;
int a[1005];
int dp[105][105][12];
int mp[105][105];
struct node {
  int x;
  int y;
  int z;
  int op;
} pre[105][105][12], w, v;
struct Edge {
  int x;
  int y;
  int op;
  int w;
} p, s;
void bfs(int n, int m, int k) {
  queue<Edge> que;
  int i, z;
  const int mod = k + 1;
  p.x = n;
  p.op = 0;
  for (i = 1; i <= m; i++) {
    p.w = mp[n][i];
    p.y = i;
    que.push(p);
  }
  while (!que.empty()) {
    p = que.front();
    que.pop();
    z = p.w % mod;
    if (dp[p.x][p.y][z] < p.w) {
      dp[p.x][p.y][z] = p.w;
      pre[p.x][p.y][z].x = p.x + 1;
      pre[p.x][p.y][z].z = p.w - mp[p.x][p.y];
      pre[p.x][p.y][z].op = p.op;
      if (p.op == 1) {
        pre[p.x][p.y][z].y = p.y - 1;
      } else {
        pre[p.x][p.y][z].y = p.y + 1;
      }
      s.op = 1;
      s.x = p.x - 1;
      s.y = p.y + 1;
      s.w = p.w + mp[s.x][s.y];
      que.push(s);
      s.op = -1;
      s.x = p.x - 1;
      s.y = p.y - 1;
      s.w = p.w + mp[s.x][s.y];
      que.push(s);
    }
  }
  int ans = -1, j;
  for (i = 1; i <= m; i++) {
    if (dp[1][i][0] > ans) {
      ans = dp[1][i][0];
      j = i;
    }
  }
  if (ans == -1) {
    puts("-1");
  } else {
    printf("%d\n", ans);
    w = pre[1][j][0];
    stack<int> ans;
    while (w.op) {
      ans.push(w.op);
      j = w.y;
      w = pre[w.x][w.y][w.z % mod];
    }
    printf("%d\n", j);
    while (!ans.empty()) {
      if (ans.top() != 1) {
        putchar('L');
      } else {
        putchar('R');
      }
      ans.pop();
    }
    puts("");
  }
}
int main() {
  int n, m, x, y, i, k, j, flag = 0, t, l;
  scanf("%d%d%d", &n, &m, &k);
  memset(dp, 2, sizeof(dp));
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      for (l = 0; l <= k; l++) {
        dp[i][j][l] = -1;
      }
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      scanf("%1d", &mp[i][j]);
    }
  }
  bfs(n, m, k);
  return 0;
}
