#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

const int N=20005;
const int INF=-1;
int n,m,p;
int a[N];
int b[N];
int F[2][N];
int Ra[N];
int Rb[N];
string Path;

inline
void checkmax(int &t,const int x){
    if (x>t) t=x;
}

inline int w(int i,int j){
    int ret=a[i]+b[j];
    if (ret>=p) ret-=p;
    return ret;
}

long long Gao(int sx,int sy,int ex,int ey){
    if (sx==ex && sy==ey) return w(sx,sy);
    int step=ex-sx + ey-sy;
    if (step==1){
       if (sx<ex) Path+='C';
             else Path+='S';
       return w(sx,sy)+w(ex,ey);
    }
    int s1=step/2;
    int s2=step-s1;
    for (int j=0;j+sy<=ey;j++) F[0][j]=F[1][j]=INF;
    for (int j=sy;j<=ey;j++) Ra[j]=Rb[j]=INF;
    F[0][0]=w(sx,sy);
    for (int i=1;i<=s1;i++){
        int p=i&1;
        for (int j=max(0,i+sx-ex);j<=i && j<=ey-sy;j++){
            F[p][j]=INF;
            int nx=i-j+sx;
            int ny=sy+j;
            if (F[p^1][j]!=INF)
            checkmax(F[p][j],F[p^1][j]+w(nx,ny));
            if (j && F[p^1][j-1]!=INF)
            checkmax(F[p][j],F[p^1][j-1]+w(nx,ny));
            if (i==s1) Ra[ny]=F[p][j];
        }
    }

    for (int j=0;j+sy<=ey;j++) F[0][j]=F[1][j]=INF;
    F[0][0]=w(ex,ey);
    for (int i=1;i<=s2;i++){
        int p=i&1;
        for (int j=max(0,sx+i-ex);j<=i && j<=ey-sy;j++){
            F[p][j]=INF;
            int nx=ex-(i-j);
            int ny=ey-j;
            if (F[p^1][j]!=INF)
            checkmax(F[p][j],F[p^1][j]+w(nx,ny));
            if (j && F[p^1][j-1]!=INF)
            checkmax(F[p][j],F[p^1][j-1]+w(nx,ny));
            if (i==s2) Rb[ny]=F[p][j]-w(nx,ny);
        }
    }
    int bx=-1;
    int by=-1;
    int ret=-1;
    for (int j=sy;j<=ey;j++){
        if (Ra[j]!=INF && Rb[j]!=INF && Ra[j]+Rb[j]>ret){
          bx=sx+s1-(j-sy);
          by=j;
          ret=Ra[j]+Rb[j];
        }
    }
    Gao(sx,sy,bx,by);
    Gao(bx,by,ex,ey);
    return ret;
}

int main(){
    scanf("%d%d%d",&n,&m,&p);
    for (int i=0;i<n;i++) { scanf("%d",&a[i]); a[i]%=p; }
    for (int i=0;i<m;i++) { scanf("%d",&b[i]); b[i]%=p; }
    cout << Gao(0,0,n-1,m-1) << endl;
    cout << Path << endl;
}
