#include <bits/stdc++.h>
using namespace std;
bitset<20005> rec[10005];
char res[40005];
int a[20005];
int b[20005];
int f[20005];
int d[20005];
int n, m, lim, c, r;
int work1() {
  int i, j, ans;
  memset(d, 0, sizeof(d));
  for (i = 1; i <= n; ++i) {
    memset(f, -1, sizeof(f));
    if (i > r) rec[i - r].reset();
    for (j = 1; j <= m; ++j) {
      f[j] = f[j - 1];
      if (f[j] < d[j]) {
        f[j] = d[j];
        if (i > r) rec[i - r][j] = 1;
      }
      f[j] += (a[i] + b[j]) % lim;
    }
    memcpy(d, f, sizeof(f));
  }
  ans = f[m];
  while (n > r && (n > 1 || m > 1))
    if (rec[n - r][m]) {
      --n;
      res[++c] = 'C';
    } else {
      --m;
      res[++c] = 'S';
    }
  return ans;
}
void work2() {
  int i, j;
  memset(d, 0, sizeof(d));
  for (i = 1; i <= n; ++i) {
    memset(f, -1, sizeof(f));
    rec[i].reset();
    for (j = 1; j <= m; ++j) {
      f[j] = f[j - 1];
      if (f[j] < d[j]) {
        f[j] = d[j];
        rec[i][j] = 1;
      }
      f[j] += (a[i] + b[j]) % lim;
    }
    memcpy(d, f, sizeof(f));
  }
  while (n > 0 && (n > 1 || m > 1))
    if (rec[n][m]) {
      --n;
      res[++c] = 'C';
    } else {
      --m;
      res[++c] = 'S';
    }
}
int main() {
  int i;
  scanf("%d%d%d", &n, &m, &lim);
  r = n / 2;
  for (i = 1; i <= n; ++i) scanf("%d", &a[i]);
  for (i = 1; i <= m; ++i) scanf("%d", &b[i]);
  printf("%d\n", work1());
  work2();
  for (i = c; i > 0; --i) printf("%c", res[i]);
  printf("\n");
  return 0;
}
