#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 20 * 1000 + 10;
int nx, ny, p;
int x[MAX_N];
int y[MAX_N];
string ans;
inline int value(int a, int b) {
  a = x[a];
  b = y[b];
  if (a + b < p) return a + b;
  return a + b - p;
}
long long dpup[2][MAX_N];
long long dpdn[2][MAX_N];
long long solve(int sx, int sy, int tx, int ty) {
  if (sx == tx) {
    long long tot = 0;
    for (int i = sy; i <= ty; i++) {
      tot += value(sx, i);
      if (i != ty) ans += 'S';
    }
    return tot;
  }
  int mid = (sx + tx) / 2;
  dpup[tx & 1][ty] = value(tx, ty);
  for (int i = ty - 1; i >= sy; i--)
    dpup[tx & 1][i] = dpup[tx & 1][i + 1] + value(tx, i);
  for (int i = tx - 1; i >= mid + 1; i--) {
    dpup[i & 1][ty] = dpup[!(i & 1)][ty] + value(i, ty);
    for (int j = ty - 1; j >= sy; j--)
      dpup[i & 1][j] =
          max(dpup[!(i & 1)][j], dpup[(i & 1)][j + 1]) + value(i, j);
  }
  dpdn[sx & 1][sy] = value(sx, sy);
  for (int i = sy + 1; i <= ty; i++)
    dpdn[sx & 1][i] = dpdn[sx & 1][i - 1] + value(sx, i);
  for (int i = sx + 1; i <= mid; i++) {
    dpdn[i & 1][sy] = dpdn[!(i & 1)][sy] + value(i, sy);
    for (int j = sy + 1; j <= ty; j++)
      dpdn[i & 1][j] = max(dpdn[!(i & 1)][j], dpdn[i & 1][j - 1]) + value(i, j);
  }
  int maxPos = sy;
  long long maxVal = dpup[(mid + 1) & 1][sy] + dpdn[mid & 1][sy];
  for (int i = sy + 1; i <= ty; i++)
    if (dpup[(mid + 1) & 1][i] + dpdn[mid & 1][i] > maxVal) {
      maxVal = dpup[(mid + 1) & 1][i] + dpdn[mid & 1][i];
      maxPos = i;
    }
  solve(sx, sy, mid, maxPos);
  ans += 'C';
  solve(mid + 1, maxPos, tx, ty);
  return maxVal;
}
int main() {
  scanf("%d %d %d", &nx, &ny, &p);
  for (int i = 0; i < (nx); i++) {
    scanf("%d", &x[i]);
    x[i] %= p;
  }
  for (int i = 0; i < (ny); i++) {
    scanf("%d", &y[i]);
    y[i] %= p;
  }
  cout << solve(0, 0, nx - 1, ny - 1) << endl;
  cout << ans << endl;
  return 0;
}
