using namespace std;
#include<fstream>
#include<stdio.h>
#include<string.h>
#define Nmax 105
#define Lmax 50
#define base 10000
int CA[Nmax][Nmax][Lmax],CN[Nmax][Nmax][Lmax];
int LA[Nmax][Nmax],LN[Nmax][Nmax];
int crt[Lmax],Ncrt;
int K[Lmax],NK;
char s[Lmax];
int comp(int a[],int na)
{
if(na>NK) return 1;
if(na<NK) return -1;
int i=NK;
while(i && a[i] == K[i]) i--;
if(i==0) return 0;
if(a[i] > K[i]) return 1;
return -1;
}
int comp2(int a[], int na)
{
int b[Lmax],nb;
memset(b,0,sizeof b);
int i,t;
for(i=1,t=0; i<=na || i<=Ncrt || t; i++, t/=base)
b[i] = (t+= a[i] + crt[i]) % base;
nb= i-1;
return comp(b,nb);
}
int main()
{
ifstream fin("pavare2.in");
FILE *fout=fopen("pavare2.out","w");
int N,A,B,i,j,k,t;
fin>>N>>A>>B>>s;
for(i=0;s[i];i++);
i--;
for(j=0;j<i;i--,j++)
{
char aux=s[i];
s[i]=s[j];
s[j]=aux;
}
NK=0;
for(i=0;s[i];i+=4)
{
K[++NK] = s[i] - '0';
if(s[i+1]) K[NK]+= 10 * (s[i+1]-'0');
if(s[i+2]) K[NK]+= 100 * (s[i+2]-'0');
if(s[i+3]) K[NK]+= 1000 * (s[i+3]-'0');
}
for(i=1;i<=N+1;i++)
{
for(j=0;j<=N+1;j++) LA[i][j]=1;
for(j=0;j<=N+1;j++) LN[i][j]=1;
}
CA[N][1][1]=1;
CN[N][1][1]=1;
for(i=N;i;i--)
{
//alb
for(j=2;j<=A;j++)
{
LA[i][j]=LA[i+1][j-1];
memcpy(CA[i][j], CA[i+1][j-1], sizeof CA[i][j]);
}
for(j=1;j<=B;j++)
{
for(k=1,t=0; k<=LA[i][1] || k<=LN[i+1][j] || t; k++, t/=base)
CA[i][1][k] = (t+= CA[i][1][k] + CN[i+1][j][k]) %base;
LA[i][1]=k-1;
}
//negru
for(j=2;j<=B;j++)
{
LN[i][j] = LN[i+1][j-1];
memcpy(CN[i][j], CN[i+1][j-1], sizeof CN[i][j]);
}
for(j=1;j<=A;j++)
{
for(k=1,t=0;k<=LN[i][1] || k<=LN[i+1][j] || t; k++, t/=base)
CN[i][1][k] = (t+= CN[i][1][k] + CA[i+1][j][k]) %base;
LN[i][1] = k-1;
}
}
for(j=A-1;j;j--)
{
for(k=1,t=0; k<=LA[1][j] || k<=LA[1][j+1] || t; k++, t/=base)
CA[1][j][k] = (t+= CA[1][j][k] + CA[1][j+1][k]) % base;
LA[1][j] = k-1;
}
LN[1][0]=LA[1][1];
memcpy(CN[1][0], CA[1][1], sizeof CN[1][0]);
for(j=1;j<=B;j++)
{
for(k=1, t=0; k<=LN[1][j] || k<=LN[1][j-1] || t; k++, t/=base)
CN[1][j][k] = (t+= CN[1][j][k] + CN[1][j-1][k]) % base;
LN[1][j] = k-1;
}
for(i=2;i<=N;i++)
{
for(j=A-1;j;j--)
{
for(k=1,t=0; k<=LA[i][j] || k<=LA[i][j+1] || t; k++, t/=base)
CA[i][j][k] = (t+= CA[i][j][k] + CA[i][j+1][k]) % base;
LA[i][j] = k-1;
}
for(j=2;j<=B;j++)
{
for(k=1,t=0; k<=LN[i][j] || k<=LN[i][j-1] || t; k++,t/=base)
CN[i][j][k] = (t+= CN[i][j][k] + CN[i][j-1][k]) % base;
LN[i][j] = k-1;
}
}
if(LN[1][B]==0) for(;;);
fprintf(fout,"%d",CN[1][B][ LN[1][B] ]);
for(i=LN[1][B]-1 ; i; i--)
fprintf(fout,"%04d",CN[1][B][i]);
fprintf(fout,"\n");
//prima valoare
int ult;
i=1;
for(j=A;j;j--)
if(comp(CA[i][j],LA[i][j]) >= 0)
break;
if(j == 0)
{
for(j=1;j<=B;j++)
if(comp(CN[i][j],LN[i][j]) >= 0)
break;
for(k=1;k<=j;k++)
fprintf(fout,"1");
ult=1;
Ncrt=LN[i][j-1];
memcpy(crt, CN[i][j-1], sizeof crt);
i+=j;
}
else
{
for(k=1;k<=j;k++)
fprintf(fout,"0");
ult=0;
Ncrt=LA[i][j+1];
memcpy(crt, CA[i][j+1], sizeof crt);
i+=j;
}
for(;i<=N;i++)
if(ult)
{//caut alb
for(j=A;j;j--)
if(comp2(CA[i][j],LA[i][j]) >= 0)
break;
for(k=1;k<=j;k++) fprintf(fout,"0");
for(k=1,t=0; k<=LA[i][j+1] || k<=Ncrt || t; k++, t/=base)
crt[k] = (t+=crt[k] + CA[i][j+1][k]) % base;
Ncrt= k-1;
i+=j-1;
ult=0;
}
else
{//caut negru
for(j=1;j<=B;j++)
if(comp2(CN[i][j],LN[i][j]) >= 0)
break;
for(k=1;k<=j;k++) fprintf(fout,"1");
for(k=1,t=0; k<=LN[i][j-1] || k<=Ncrt||t; k++, t/=base)
crt[k] = (t+=crt[k] + CN[i][j-1][k]) % base;
Ncrt= k-1;
i+=j-1;
ult=1;
}
fprintf(fout,"\n");
fin.close();
fclose(fout);
return 0;
}