#include <bits/stdc++.h>
int a, b, c, d, e, i, j, k;
long long f[100006], g[100005], h[2][100005];
int p;
int X[100005], Y[100005];
int in;
int Max(int x, int y) {
  if (x > y) return x;
  return y;
}
int G(int x, int y) { return (X[x] + Y[y]) % p; }
long long FZ(int x, int y, int xx, int yy) {
  int ii, jj;
  long long kk;
  int mid;
  int u;
  if (y == yy) {
    kk = 0;
    for (ii = x; ii <= xx; ii++) kk += (X[ii] + Y[y]) % p;
    d++;
    return kk;
  }
  kk = -1 << 30;
  mid = (y + yy) >> 1;
  for (ii = y; ii <= mid; ii++) {
    if (ii == y)
      h[ii & 1][x] = G(x, ii);
    else
      h[ii & 1][x] = G(x, ii) + h[(ii & 1) ^ 1][x];
    if (ii != y)
      for (jj = x + 1; jj <= xx; jj++)
        h[ii & 1][jj] = Max(h[ii & 1][jj - 1], h[(ii & 1) ^ 1][jj]) + G(jj, ii);
    else
      for (jj = x + 1; jj <= xx; jj++)
        h[ii & 1][jj] = h[ii & 1][jj - 1] + G(jj, ii);
  }
  for (ii = x; ii <= xx; ii++) f[ii] = h[mid & 1][ii];
  for (ii = yy; ii > mid; ii--) {
    if (ii == yy)
      h[ii & 1][xx] = G(xx, ii);
    else
      h[ii & 1][xx] = G(xx, ii) + h[(ii & 1) ^ 1][xx];
    if (ii != yy)
      for (jj = xx - 1; jj >= x; jj--)
        h[ii & 1][jj] = Max(h[ii & 1][jj + 1], h[(ii & 1) ^ 1][jj]) + G(jj, ii);
    else
      for (jj = xx - 1; jj >= x; jj--)
        h[ii & 1][jj] = h[ii & 1][jj + 1] + G(jj, ii);
  }
  for (ii = x; ii <= xx; ii++) g[ii] = h[(mid + 1) & 1][ii];
  for (ii = x; ii <= xx; ii++) {
    if (f[ii] + g[ii] > kk) {
      kk = f[ii] + g[ii];
      in = ii;
    }
  }
  return kk;
}
void Print(int x, int y, int xx, int yy) {
  int ii, jj;
  long long kk;
  int mid;
  if (y == yy) {
    kk = 0;
    for (ii = x; ii < xx; ii++) printf("C");
    return;
  }
  kk = -1 << 30;
  mid = (y + yy) >> 1;
  if (y > 0 || yy < b - 1) {
    for (ii = y; ii <= mid; ii++) {
      if (ii == y)
        h[ii & 1][x] = G(x, ii);
      else
        h[ii & 1][x] = G(x, ii) + h[(ii & 1) ^ 1][x];
      if (ii != y)
        for (jj = x + 1; jj <= xx; jj++)
          h[ii & 1][jj] =
              Max(h[ii & 1][jj - 1], h[(ii & 1) ^ 1][jj]) + G(jj, ii);
      else
        for (jj = x + 1; jj <= xx; jj++)
          h[ii & 1][jj] = h[ii & 1][jj - 1] + G(jj, ii);
    }
    for (ii = x; ii <= xx; ii++) f[ii] = h[mid & 1][ii];
    for (ii = yy; ii > mid; ii--) {
      if (ii == yy)
        h[ii & 1][xx] = G(xx, ii);
      else
        h[ii & 1][xx] = G(xx, ii) + h[(ii & 1) ^ 1][xx];
      if (ii != yy)
        for (jj = xx - 1; jj >= x; jj--)
          h[ii & 1][jj] =
              Max(h[ii & 1][jj + 1], h[(ii & 1) ^ 1][jj]) + G(jj, ii);
      else
        for (jj = xx - 1; jj >= x; jj--)
          h[ii & 1][jj] = h[ii & 1][jj + 1] + G(jj, ii);
    }
    for (ii = x; ii <= xx; ii++) g[ii] = h[(mid + 1) & 1][ii];
    for (ii = x; ii <= xx; ii++) {
      if (f[ii] + g[ii] > kk) {
        kk = f[ii] + g[ii];
        jj = ii;
      }
    }
  } else
    jj = in;
  Print(x, y, jj, mid);
  printf("S");
  Print(jj, mid + 1, xx, yy);
}
int main() {
  scanf("%d%d%d", &a, &b, &p);
  for (i = 0; i < a; i++) scanf("%d", &X[i]);
  for (i = 0; i < b; i++) scanf("%d", &Y[i]);
  printf("%I64d\n", FZ(0, 0, a - 1, b - 1));
  Print(0, 0, a - 1, b - 1);
  return 0;
}
