#include <bits/stdc++.h>
using namespace std;
int N, M, P, numB, x[20001 + 142], y[20001];
int modN, cS, cB;
int bDp[142][20001];
int dp[142 + 1][20001];
int sDp[2][20001];
int cSt, cAns;
int spY, spX;
bool ans[2 * 20001];
int fMax(int a, int b) { return (((a - b) >> 31) & (a ^ b)) ^ a; }
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]);
  }
  for (int i = 0; i < N; i++, modN++, cS = !cS) {
    for (int p = 0; p < M; p++) {
      sDp[cS][p] = sDp[!cS][p];
      if (p != 0) sDp[cS][p] = fMax(sDp[cS][p], sDp[cS][p - 1]);
      sDp[cS][p] += (x[i] + y[p]) % P;
    }
    if (modN == 142) modN = 0;
    if (!modN) {
      for (int p = 0; p < M; p++) {
        bDp[cB][p] = sDp[cS][p];
      }
      cB++;
    }
  }
  printf("%d\n", sDp[!cS][M - 1]);
  numB = cB;
  spY = (N - 1) % 142;
  spX = M - 1;
  for (int i = numB - 1; i >= 0; i--) {
    cSt = i * 142;
    for (int p = 0; p < M; p++) dp[0][p] = bDp[i][p];
    for (int p = 1; p <= 142; p++) {
      for (int t = 0; t < M; t++) {
        dp[p][t] = dp[p - 1][t];
        if (t != 0) dp[p][t] = fMax(dp[p][t], dp[p][t - 1]);
        dp[p][t] += (x[cSt + p] + y[t]) % P;
      }
    }
    for (; spY > 0; cAns++) {
      if (!spX)
        spY--;
      else {
        if (dp[spY - 1][spX] >= dp[spY][spX - 1]) {
          spY--;
        } else {
          spX--;
          ans[cAns] = true;
        }
      }
    }
    spY = 142;
  }
  for (; cAns < N + M - 2; cAns++) ans[cAns] = true;
  for (int i = cAns - 1; i >= 0; i--) {
    if (!ans[i])
      printf("C");
    else
      printf("S");
  }
  printf("\n");
  return 0;
}
