#include <bits/stdc++.h>
using namespace std;
const int SIZE = 140;
const int maxn = 20010;
int n, m, p;
int x[maxn], y[maxn], wa[maxn], wb[maxn], d[SIZE + 10][maxn],
    f[SIZE + 10][maxn];
vector<char> res;
bitset<maxn> g[SIZE + 10];
int doit(int o, int n, int m) {
  int L = o * SIZE, R = min((o + 1) * SIZE, n - 1);
  for (int i = 0; i < m; i++) f[0][i] = d[o][i], g[0][i] = 0;
  for (int i = 0; i < R - L; i++) {
    f[i + 1][0] = f[i][0] + (x[L + i + 1] + y[0]) % p;
    g[i + 1][0] = 0;
    for (int j = 1; j < m; j++)
      if (f[i][j] > f[i + 1][j - 1]) {
        f[i + 1][j] = f[i][j] + (x[L + i + 1] + y[j]) % p;
        g[i + 1][j] = 0;
      } else {
        f[i + 1][j] = f[i + 1][j - 1] + (x[L + i + 1] + y[j]) % p;
        g[i + 1][j] = 1;
      }
  }
  int u = R - L, v = m - 1;
  for (;;)
    if (g[u][v] == 0) {
      if (u == 0) break;
      res.push_back('C');
      u--;
    } else {
      res.push_back('S');
      v--;
    }
  return v + 1;
}
int main() {
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) cin >> x[i];
  for (int i = 0; i < m; i++) cin >> y[i];
  int *dp = wa, *dp1 = wb, *tmp;
  dp[0] = (x[0] + y[0]) % p;
  for (int i = 1; i < m; i++) dp[i] = dp[i - 1] + (x[0] + y[i]) % p;
  for (int i = 1; i < n; i++) {
    if ((i - 1) % SIZE == 0) memcpy(d[(i - 1) / SIZE], dp, sizeof(wa));
    dp1[0] = dp[0] + (x[i] + y[0]) % p;
    for (int j = 1; j < m; j++)
      dp1[j] = max(dp1[j - 1], dp[j]) + (x[i] + y[j]) % p;
    tmp = dp;
    dp = dp1;
    dp1 = tmp;
  }
  int cnt = m;
  if (n > 1)
    for (int i = (n - 2) / SIZE; i >= 0; i--) cnt = doit(i, n, cnt);
  while (res.size() < n + m - 2) res.push_back('S');
  cout << dp[m - 1] << endl;
  for (int i = res.size() - 1; i >= 0; i--) cout << res[i];
  cout << endl;
  return 0;
}
