#include <bits/stdc++.h>
using namespace std;
inline int gi() {
  char ch = getchar();
  while (!((ch >= '0' && ch <= '9') || ch == '-')) ch = getchar();
  int x = 0, p = 1;
  if (ch == '-') p = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * p;
}
int n, m, p, x[20001], y[20001], a[20001], b[20001], ans;
vector<char> v1;
void f1(int x0, int x1, int y0, int y1) {
  if (x0 == x1) {
    ans += (x[x0] + y[y0]) % p;
    for (int i = y0 + 1; i <= y1; i++)
      ans += (x[x0] + y[i]) % p, v1.push_back('S');
    return;
  }
  int mid = (x0 + x1) >> 1;
  for (int i = y0; i <= y1; i++) a[i] = b[i] = 0;
  for (int i = x0; i <= mid; i++) {
    a[y0] += (x[i] + y[y0]) % p;
    for (int j = y0 + 1; j <= y1; j++)
      a[j] = max(a[j], a[j - 1]) + (x[i] + y[j]) % p;
  }
  for (int i = x1; i >= mid + 1; i--) {
    b[y1] += (x[i] + y[y1]) % p;
    for (int j = y1 - 1; j >= y0; j--)
      b[j] = max(b[j], b[j + 1]) + (x[i] + y[j]) % p;
  }
  int y2 = y0, temp = a[y0] + b[y0];
  for (int i = y0 + 1; i <= y1; i++)
    if (a[i] + b[i] > temp) temp = a[i] + b[i], y2 = i;
  f1(x0, mid, y0, y2);
  v1.push_back('C');
  f1(mid + 1, x1, y2, y1);
}
int main() {
  n = gi(), m = gi(), p = gi();
  for (int i = 0; i <= n - 1; i++) x[i] = gi();
  for (int i = 0; i <= m - 1; i++) y[i] = gi();
  f1(0, n - 1, 0, m - 1);
  printf("%d\n", ans);
  for (int i = 0; i < v1.size(); i++) putchar(v1[i]);
  putchar(10);
  return 0;
}
