#include <bits/stdc++.h>
using namespace std;
const int maxn = 20005;
int p;
int x[maxn], y[maxn];
long long int dp1[maxn], dp2[maxn];
pair<int, int> opt[maxn + maxn];
void Solve(int x1, int y1, int x2, int y2, int pre, int d) {
  opt[pre] = {x1, y1};
  opt[pre + d] = {x2, y2};
  if (d <= 1) return;
  vector<pair<int, int> > valid;
  for (int j = y1; j <= y2; j++) dp1[j] = dp2[j] = 0;
  int d1 = d / 2;
  for (int i = x1; i <= x2; i++) {
    int dfX = i - x1;
    if (dfX > d1) break;
    for (int j = y1; j <= y2; j++) {
      int dfY = j - y1;
      if (dfX + dfY > d1) break;
      if (j > y1) dp1[j] = max(dp1[j], dp1[j - 1]);
      dp1[j] += (x[i] + y[j]) % p;
      if (dfX + dfY == d1) valid.push_back({i, j});
    }
  }
  int d2 = d - d1;
  for (int i = x2; i >= x1; i--) {
    int dfX = x2 - i;
    if (dfX > d2) break;
    for (int j = y2; j >= y1; j--) {
      int dfY = y2 - j;
      if (dfX + dfY > d2) break;
      if (j < y2) dp2[j] = max(dp2[j], dp2[j + 1]);
      dp2[j] += (x[i] + y[j]) % p;
    }
  }
  long long int Max = 0;
  pair<int, int> best = {-1, -1};
  for (auto it : valid) {
    int i = it.first;
    int j = it.second;
    long long int Me = dp1[j] + dp2[j] - (x[i] + y[j]) % p;
    if (Me >= Max) Max = Me, best = {i, j};
  }
  opt[pre + d1] = best;
  Solve(x1, y1, best.first, best.second, pre, d1);
  Solve(best.first, best.second, x2, y2, pre + d1, d2);
}
int main() {
  int n, m;
  scanf("%d %d %d", &n, &m, &p);
  for (int i = 0; i < n; i++) scanf("%d", &x[i]);
  for (int i = 0; i < m; i++) scanf("%d", &y[i]);
  int tot = n - 1 + m - 1;
  Solve(0, 0, n - 1, m - 1, 0, tot);
  long long int sum = 0;
  for (int i = 0; i <= tot; i++)
    sum += (x[opt[i].first] + y[opt[i].second]) % p;
  printf("%lld\n", sum);
  for (int i = 1; i <= tot; i++) {
    if (opt[i].first == opt[i - 1].first)
      printf("S");
    else
      printf("C");
  }
}
