#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20010, MAXM = 20010;
int n, m, p;
int a[MAXN], b[MAXM];
int f[MAXN], g[MAXN];
void dp1(int n, int m, int a[], int b[], int limit) {
  f[0] = (a[0] + b[0]) % p;
  for (int i = 1; i <= limit; ++i) {
    int l = max(0, i - m + 1), r = min(n - 1, i);
    for (int j = r; j >= l; --j) {
      int tmp = 0;
      if (j > 0) tmp = max(tmp, f[j - 1] + (a[j] + b[i - j]) % p);
      if (i - j > 0) tmp = max(tmp, f[j] + (a[j] + b[i - j]) % p);
      f[j] = tmp;
    }
  }
}
void dp2(int n, int m, int a[], int b[], int limit) {
  g[n - 1] = (a[n - 1] + b[m - 1]) % p;
  for (int i = n + m - 3; i >= limit; --i) {
    int l = max(0, i - m + 1), r = min(n - 1, i);
    for (int j = l; j <= r; ++j) {
      int tmp = 0;
      if (j < n - 1) tmp = max(tmp, g[j + 1] + (a[j] + b[i - j]) % p);
      if (i - j < m - 1) tmp = max(tmp, g[j] + (a[j] + b[i - j]) % p);
      g[j] = tmp;
    }
  }
}
void solve(int n, int m, int a[], int b[]) {
  if (n == 1 && m == 1) return;
  int tot = n + m - 2, mid = tot / 2;
  dp1(n, m, a, b, mid);
  dp2(n, m, a, b, mid + 1);
  int l = max(0, mid - m + 1), r = min(n - 1, mid);
  int ans = -1, x, y;
  for (int i = l; i <= r; ++i) {
    if (i < n - 1 && f[i] + g[i + 1] > ans) {
      ans = f[i] + g[i + 1];
      x = i, y = i + 1;
    }
    if (mid - i < m - 1 && f[i] + g[i] > ans) {
      ans = f[i] + g[i];
      x = i, y = i;
    }
  }
  solve(x + 1, mid - x + 1, a, b);
  putchar(x < y ? 'C' : 'S');
  solve(n - y, m - (mid + 1 - y), a + y, b + mid + 1 - y);
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  for (int i = 0; i < m; ++i) scanf("%d", &b[i]);
  dp1(n, m, a, b, n + m - 2);
  printf("%d\n", f[n - 1]);
  solve(n, m, a, b);
}
