#include <iostream>

using namespace std;

void f(int *niz, int &brcif, int val)
{
    for(int i=0;i<20;i++)
    {
        niz[i]=0;
    }
    
    int brojac=19;
    while(val>0)
    {
      niz[brojac]=val%10 ;
      val=val/10;
      (brcif)++;
      brojac--;
    }
}

void t(int *niz, int *a, int *b, int *c, int brcif1, int brcif2,int brcif3)
{
    for(int i=0; i<60; i++)
    {
        niz[i]=0;
    }
    
    for (int i=59; i>59-brcif3; i--)
    {
        niz[i]=c[19+i-59];
    }
    
    for(int i=59-brcif3; i>59-brcif3-brcif2;i--)
    {
        niz[i]=b[19+i-59+brcif3];
    }
    
    for(int i=59-brcif3-brcif2;i>59-brcif3-brcif2-brcif1; i--)
    {
        niz[i]=a[19+i-59+brcif3+brcif2];
    }
}

bool vece(int *a, int *b)
{
    bool p=true;
    for(int i=0;i<60; i++)
    if(a[i]<b[i]){p=false;break;}
    else if(a[i]>b[i]){p=true; break;}
    
    return p;
}

void assn(int *a, int *b)
{
    for(int i=40; i<60; i++)
    a[i]=b[i-40];
}

int main()
{
   unsigned long long a, b, c;
   cin>>a>>b>>c;
   int brcif1, brcif2, brcif3;
   int a1[20], b1[20],c1[20], max[7][60], maxmax[60],max1[60];
   f(a1, brcif1, a);  
   f(b1, brcif2, b);
   f(c1, brcif3, c);
   t(max[1],a1,b1,c1,brcif1,brcif2,brcif3);
   t(max[2],a1,c1,b1,brcif1,brcif3,brcif2);
   t(max[3],b1,a1,c1,brcif2,brcif1,brcif3);
   t(max[4],b1,c1,a1,brcif2,brcif3,brcif1);
   t(max[5],c1,a1,b1,brcif3,brcif1,brcif2);
   t(max[6],c1,b1,a1,brcif3,brcif2,brcif1);
   
   assn(maxmax,max[1]);
   for(int i=2;i<=6;i++)
   {
       if(vece(max[i],maxmax))assn(maxmax,max[i]);
   }
   
   bool p=false;
   for(int i=0; i<60; i++)
   {
       if(maxmax[i]>0)p=true;
       if(p)cout<<maxmax[i];
   }
   
   return 0;
}