#include <bits/stdc++.h>
using namespace std;
int fir[20005], sec[20005], pre[20005], res[20005], *dp, *nxt;
int x[20005], y[20005], p;
inline int calc(int a, int b) {
  int sum = x[a] + y[b];
  if (sum >= p) sum -= p;
  return sum;
}
inline void upd(int &a, int b) {
  if (a < b) a = b;
}
void dp_up(int u, int d, int l, int r) {
  dp = fir;
  nxt = sec;
  memset(sec + l, -0x3f, r - l + 1 << 2);
  sec[r] = calc(d, r);
  for (int i = d; i >= u; i--) {
    memcpy(pre + l, dp + l, r - l + 1 << 2);
    swap(dp, nxt);
    memset(nxt + l, -0x3f, r - l + 1 << 2);
    for (int j = r; j >= l; j--) {
      if (j != l) upd(dp[j - 1], dp[j] + calc(i, j - 1));
      if (i != u) upd(nxt[j], dp[j] + calc(i - 1, j));
    }
  }
}
void dp_down(int u, int d, int l, int r) {
  dp = fir;
  nxt = sec;
  memset(sec + l, -0x3f, r - l + 1 << 2);
  sec[l] = calc(u, l);
  for (int i = u; i <= d; i++) {
    memcpy(pre + l, dp + l, r - l + 1 << 2);
    swap(dp, nxt);
    memset(nxt + l, -0x3f, r - l + 1 << 2);
    for (int j = l; j <= r; j++) {
      if (j != r) upd(dp[j + 1], dp[j] + calc(i, j + 1));
      if (i != d) upd(nxt[j], dp[j] + calc(i + 1, j));
    }
  }
}
void work(int u, int d, int l, int r, int sum) {
  if (u == d) {
    for (int i = l; i < r; i++) putchar('S');
    return;
  }
  if (l == r) {
    for (int i = u; i < d; i++) putchar('C');
    return;
  }
  int m = u + d >> 1;
  dp_down(u, m, l, r);
  memcpy(res + l, dp + l, r - l + 1 << 2);
  dp_up(m, d, l, r);
  for (int i = l; i <= r; i++) {
    if (res[i] + dp[i] != sum + calc(m, i)) continue;
    int xx, yy, mx;
    if (i != r && dp[i] == dp[i + 1] + calc(m, i)) {
      xx = m;
      yy = i + 1;
      mx = dp[i + 1];
    } else {
      xx = m + 1;
      yy = i;
      mx = pre[i];
    }
    work(u, m, l, i, res[i]);
    putchar(xx == m ? 'S' : 'C');
    work(xx, d, yy, r, mx);
    return;
  }
}
int main() {
  int n, m;
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 0; i < n; i++) {
    scanf("%d", x + i);
    x[i] %= p;
  }
  for (int i = 0; i < m; i++) {
    scanf("%d", y + i);
    y[i] %= p;
  }
  dp_down(0, n - 1, 0, m - 1);
  printf("%d\n", dp[m - 1]);
  work(0, n - 1, 0, m - 1, dp[m - 1]);
  putchar('\n');
  return 0;
}
