#include <bits/stdc++.h>
using namespace std;
const int MAXN = 41234, INFTY = 0x3f3f3f3f;
int resp[2][MAXN], x[MAXN], y[MAXN], p, N, M, x_m, dp[2][2 * MAXN], tot,
    sum_cur[2][2 * MAXN];
struct p {
  int x0, y0, xn, yn, ini, fim;
} pilha[MAXN];
inline int f(int xx, int yy) { return ((x[xx] + y[yy]) % p); }
inline void calc(int x0, int y0, int xn, int yn, int flag) {
  x_m = (xn - x0 + yn - y0 + flag) / 2;
  for (int k = y0; k <= yn; k++) {
    sum_cur[flag][k] = -(INFTY * 2);
    dp[0][k] = 0;
  }
  for (int i = x0; i <= xn; i++) {
    for (int k = y0; k <= yn; k++) dp[1][k] = dp[0][k];
    if (!flag)
      dp[0][y0] = dp[1][y0] + f(i, y0);
    else
      dp[0][y0] = dp[1][y0] + f(xn + x0 - i, yn);
    if (i - x0 == x_m) {
      if (!flag)
        sum_cur[flag][y0] = dp[0][y0];
      else
        sum_cur[flag][y0] = dp[0][y0] - f(xn + x0 - i, yn);
    }
    for (int k = y0 + 1; k <= yn; k++) {
      if (!flag)
        dp[0][k] = max(dp[0][k - 1], dp[1][k]) + f(i, k);
      else
        dp[0][k] = max(dp[0][k - 1], dp[1][k]) + f(xn + x0 - i, yn + y0 - k);
      if (i - x0 + k - y0 == x_m) {
        if (!flag)
          sum_cur[flag][k] = dp[0][k];
        else
          sum_cur[flag][k] = dp[0][k] - f(xn + x0 - i, yn + y0 - k);
      }
    }
  }
}
inline void solve() {
  int topo = 1;
  pilha[1].x0 = 0;
  pilha[1].y0 = 0;
  pilha[1].xn = N - 1;
  pilha[1].yn = M - 1;
  pilha[1].ini = 0;
  pilha[1].fim = N + M - 2;
  while (topo > 0) {
    int x0 = pilha[topo].x0, y0 = pilha[topo].y0, xn = pilha[topo].xn,
        yn = pilha[topo].yn;
    int ini = pilha[topo].ini, fim = pilha[topo].fim;
    if (fim - ini == 1) {
      resp[0][ini] = x0;
      resp[1][ini] = y0;
      resp[0][fim] = xn;
      resp[1][fim] = yn;
      topo--;
      continue;
    }
    calc(x0, y0, xn, yn, 0);
    calc(x0, y0, xn, yn, 1);
    int aux, ans = -(2 * INFTY);
    int id;
    for (int k = y0; k <= yn; k++) {
      if (sum_cur[0][k] < 0 || sum_cur[1][yn + y0 - k] < 0) continue;
      aux = sum_cur[0][k] + sum_cur[1][yn + y0 - k];
      if (aux > ans) {
        ans = aux;
        id = k;
      }
    }
    int mid = (ini + fim) / 2;
    resp[0][mid] = x0 + (xn - x0 + yn - y0) / 2 - (id - y0);
    resp[1][mid] = id;
    if (x0 == 0 && xn == N - 1 && y0 == 0 && yn == M - 1) tot = ans;
    topo--;
    if (mid != fim) {
      ++topo;
      pilha[topo].xn = xn;
      pilha[topo].yn = yn;
      pilha[topo].x0 = resp[0][mid];
      pilha[topo].y0 = resp[1][mid];
      pilha[topo].ini = mid;
      pilha[topo].fim = fim;
    }
    if (ini != mid) {
      topo++;
      pilha[topo].x0 = x0;
      pilha[topo].y0 = y0;
      pilha[topo].xn = resp[0][mid];
      pilha[topo].yn = resp[1][mid];
      pilha[topo].ini = ini;
      pilha[topo].fim = mid;
    }
  }
}
int main() {
  scanf("%d %d %d", &N, &M, &p);
  for (int i = 0; i < N; i++) scanf("%d", &x[i]);
  for (int i = 0; i < M; i++) scanf("%d", &y[i]);
  if (N == 1 && M == 1) {
    printf("%d\n\n", f(0, 0));
    return 0;
  }
  solve();
  printf("%d\n", tot);
  for (int i = 1; i < N + M - 1; i++) {
    if (resp[0][i] != resp[0][i - 1])
      printf("C");
    else
      printf("S");
  }
  printf("\n");
  return 0;
}
