#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("randuri.in");
ofstream fout("randuri.out");
int N,n,m,i,j;
bool ok;
int a[105][105][105],b[105][105][105],c[105],k[105],l,s[105],t,d[105]={4,1,2,3,4},x[105]={2,2,5};
char aux[105];
void cpy(int a[], int b[]){
memset(a,0,sizeof(a));
a[0]=b[0];
for(int i=1;i<=a[0];i++)
a[i]=b[i];
}
void tipar(int n){
for(int i=1;i<=n;i++)
fout<<ok;
}
void suma(int a[], int b[], int c[]){
int i,t=0;
for(i=1;i<=a[0] || i<=b[0];i++){
c[i]=a[i]+b[i]+t;
c[i]%=10;
t/=10;
}
c[0]=i-1;
if(t!=0)
c[++c[0]]=t;
}
void dif(int a[], int b[]){
int i,t=0;
for(i=b[0]+1;i<=a[0];i++)
b[i]=0;
for(i=1;i<=a[0];i++){
a[i]=a[i]-(b[i]+t);
if(a[i]<0)
t=1;
else
t=0;
if(t!=0)
a[i]+=10;
}
while(a[a[0]]==0)
a[0]--;
}
int cmp(int a[], int b[]){
int i;
for(i=max(a[0],b[0]);i>=1;i--)
if(a[i]>b[i])
return 1;
else if(a[i]<b[i])
return -1;
return 0;
}
int main()
{
fin>>N>>n>>m;
fin.get();
fin.getline(aux+1,100);
for(i=1;aux[i]!=0;i++)
k[i]=aux[i];
k[0]=strlen(aux+1);
a[0][0][0]=a[0][0][1]=b[0][0][0]=b[0][0][1]=1;
for(i=1;i<=N;i++){
for(j=1;j<=n && j<=i;j++){
cpy(a[i][j],b[i-j][0]);
suma(a[i][0],a[i][j],a[i][0]);
}
for(j=1;j<=m && j<=i;j++){
cpy(b[i][j],a[i-j][0]);
suma(b[i][0],b[i][j],b[i][0]);
}
}
suma(a[N][0],b[N][0],c);
for(i=c[0];i>=1;i--)
fout<<c[i];
fout<<'\n';
ok=0;
l=N;
while(l!=0){
if(ok==0){
if(cmp(k,a[l][0])>0){
dif(k,a[l][0]);
ok=1;
}
else{
for(j=n;j>=1;j--)
if(cmp(k,a[l][j])>0)
dif(k,a[l][j]);
else{
tipar(j);
l-=j;
ok=1;
break;
}
}
}
else{
if(cmp(k,b[l][0])>0){
dif(k,b[l][0]);
ok=0;
}
else{
for(j=1;j<=m;j++)
if(cmp(k,b[l][j])>0)
dif(k,b[l][j]);
else{
tipar(j);
l-=j;
ok=0;
break;
}
}
}
}
return 0;
}