#include<iostream>

using namespace std;
struct Broj{
    unsigned short *cifra;
    int len;
    Broj(int n){
        cifra = new unsigned short[n];
        len=0;
    }
};

void unos(Broj &A){
    unsigned long long a;
    cin>>a;
    A.len=0;
    while(a){
        *(A.cifra+A.len)=a%10;
        A.len++;
        a/=10;
    }
    for(int i=0;i<A.len/2;i++){
        swap(*(A.cifra+i),*(A.cifra+A.len-1-i));
    }
}
void ispis(unsigned short A[],int n){
    for(int i=0;i<n;i++){
        cout<<A[i];
    }
    cout<<endl;
}
void ispis(Broj a){
    ispis(a.cifra,a.len);
}
Broj max(Broj a,Broj b){
    for(int i=0;i<a.len;i++){
        if(*(a.cifra+i)>*(b.cifra+i))
            return a;
        if(*(a.cifra+i)<*(b.cifra+i))
            return b;
    }
    return a;
}
Broj maximum(Broj a[],int n){
    Broj m=a[0];
    for(int i=1;i<n;i++){
        m=max(m,a[i]);
    }
    return m;
}
void spoji(Broj a,Broj b,Broj c,Broj &x){
    x.len=0;
    for(int i=0;i<a.len;i++){
        *(x.cifra+x.len)=*(a.cifra+i);
        x.len++;
    }
    for(int i=0;i<b.len;i++){
        *(x.cifra+x.len)=*(b.cifra+i);
        x.len++;
    }
    for(int i=0;i<c.len;i++){
        *(x.cifra+x.len)=*(c.cifra+i);
        x.len++;
    }
}

int main(){
    Broj a(20),b(20),c(20);
    Broj x[6](60);

    unos(a);
    unos(b);
    unos(c);

    spoji(a,b,c,x[0]);
    spoji(a,c,b,x[1]);
    spoji(b,a,c,x[2]);
    spoji(b,c,a,x[3]);
    spoji(c,a,b,x[4]);
    spoji(c,b,a,x[5]);

    ispis(maximum(x,6));
    return 0;
}