#include<stdio.h>
#include<string.h>
#define lg 105
int n, a, b, K[lg], d[lg][lg][2][lg], i, j, sol[lg], trc[lg], s, rsp[lg], p;
char sir[lg];
void add(int a[], int b[]){
int i, p = 0;
for (i = 1; i <= a[0] || i <= b[0] || p; i ++, p /= 10)
a[i] = (p += a[i] + b[i]) % 10;
a[0] = i-1;
}
void sub(int a[], int b[]){
int i, p = 0;
for (i = 1; i <= a[0]; i ++)
a[i] += (p = (a[i] -= b[i] + p) < 0) * 10;
for (; !a[a[0]]; a[0] --);
}
int cmp(int a[], int b[]){
int i;
if (a[0] < b[0])
return -1;
if (a[0] > b[0])
return 1;
for (i = a[0]; i; i --){
if (a[i] < b[i])
return -1;
if (a[i] > b[i])
return 1;
}
return -1;
}
void afis(int a[]){
for (int i = 1; i <= a[0]; i ++)
printf("%d", a[i]);
printf("\n");
}
int main()
{
freopen("pavare2.in", "rt", stdin);
freopen("pavare2.out", "wt", stdout);
scanf("%d%d%d\n%s", &n, &a, &b, sir);
int xx = strlen(sir);
for (i = xx-1; i >= 0; i --)
K[++ K[0]] = sir[i] - '0';
d[1][1][0][0] = d[1][1][0][1] = 1;
d[1][1][1][0] = d[1][1][1][1] = 1;
for (i = 1; i < n; i ++)
for (j = 1; j <= a || j <= b; j ++){
if (j <= a){
if (j < a)
add(d[i+1][j+1][0], d[i][j][0]);
add(d[i+1][1][1], d[i][j][0]);
}
if (j <= b){
if (j < b)
add(d[i+1][j+1][1], d[i][j][1]);
add(d[i+1][1][0], d[i][j][1]);
}
}
for (i = 1; i <= a || i <= b; i ++){
if (i <= a)
add(sol, d[n][i][0]);
if (i <= b)
add(sol, d[n][i][1]);
}
for (i = sol[0]; i; i --)
printf("%d", sol[i]);
printf("\n");
//naspa de acum
//afis(d[n][a][0]);
p = n+1; int pct = -1;
while (p > 1){
memset(sol, 0, sizeof(sol)); memset(trc, 0, sizeof(trc)); s = 0;
if (pct == 0 || pct == -1)
for (i = a; i; i --){
add(sol, d[p-1][i][0]);
if (cmp(K, sol) == -1){
s = 1;
p -= i;
sub(K, trc); pct = 1;
break;
}
else
add(trc, d[p-1][i][0]);
}
if (s)
continue;
if (pct == 1 || pct == -1)
for (i = 1; i <= b; i ++){
add(sol, d[p-1][i][1]);
if (cmp(K, sol) == -1){
s = 1;
for (j = p-1; j >= p-i; j --)
rsp[j] = 1;
p -= i;
sub(K, trc); pct = 0;
break;
}
else
add(trc, d[p-1][i][1]);
}
//afis(K);
}
for (i = n; i; i --)
printf("%d", rsp[i]);
printf("\n");
return 0;
}