#include <cstdio>
#include <cstring>
const int N_Max = 105, L_Max = 155;
typedef int Huge[L_Max];
Huge K, a[N_Max][N_Max], b[N_Max][N_Max];
int N, A, B;
void read() {
char s[L_Max];
scanf("%d%d%d\n", &N, &A, &B);
gets(s);
for (int i = strlen(s) - 1; i >= 0; -- i)
K[++ K[0]] = s[i] - '0';
}
void init() {
a[1][1][++ a[1][1][0]] = 1;
b[1][1][++ b[1][1][0]] = 1;
}
void reset(Huge a) {
for (int i = 0; i < L_Max; ++ i)
a[i] = 0;
}
void adun(Huge a, Huge b) {
int i = 0, T = 0;
for (i = 1; i <= a[0] || i <= b[0] || T; ++ i) {
a[i] += b[i] + T;
T = a[i] / 10;
a[i] %= 10;
}
a[0] = i - 1;
}
int comp(Huge a, Huge b) {
if (a[0] < b[0])
return - 1;
if (a[0] > b[0])
return 1;
for (int i = a[0]; i >= 1; -- i)
if (a[i] < b[i])
return - 1;
else if (a[i] > b[i])
return 1;
return 0;
}
void scade(Huge a, Huge b) {
int T = 0;
for (int i = 1; i <= a[0]; ++ i) {
a[i] -= (b[i] + T);
if (a[i] < 0) {
T = 1;
a[i] += 10;
} else
T = 0;
}
while (! a[a[0]])
-- a[0];
}
void afis(Huge a) {
for (int i = a[0]; i >= 1; -- i)
printf("%d", a[i]);
printf("\n");
}
void solve_a() {
Huge rez;
reset(rez);
for (int i = 2; i <= N; ++ i) {
for (int j = 1; j <= B; ++ j)
adun(a[i][1], b[i - 1][j]);
for (int j = 2; j <= A; ++ j)
adun(a[i][j], a[i - 1][j - 1]);
for (int j = 1; j <= A; ++ j)
adun(b[i][1], a[i - 1][j]);
for (int j = 2; j <= B; ++ j)
adun(b[i][j], b[i - 1][j - 1]);
}
for (int j = 1; j <= A; ++ j)
adun(rez, a[N][j]);
for (int j = 1; j <= B; ++ j)
adun(rez, b[N][j]);
afis(rez);
}
void rez(int lastp, int lasts, int lastb) {
if (lastp == 1)
return;
bool ok = false;
int poz = 0;
if (lastb == 0) {
if (lasts == 1) {
for (int j = 1; j <= B; ++ j)
if (comp(K, b[lastp - 1][j]) <= 0) {
ok = true;
poz = j;
break;
} else
scade(K, b[lastp - 1][j]);
printf("1");
rez(lastp - 1, poz, 1);
return;
}
printf("0");
rez(lastp - 1, lasts - 1, 0);
return;
}
if (lastb == 1) {
if (lasts == 1) {
for (int j = A; j >= 1; -- j)
if (comp(K, a[lastp - 1][j]) <= 0) {
ok = true;
poz = j;
break;
} else
scade(K, a[lastp - 1][j]);
printf("0");
rez(lastp - 1, poz, 0);
return;
}
printf("1");
rez(lastp - 1, lasts - 1, 1);
return;
}
}
void solve_b() {
bool ok = false;
int poz = 0;
for (int j = A; j >= 1; -- j)
if (comp(K, a[N][j]) <= 0) {
ok = true;
poz = j;
break;
} else
scade(K, a[N][j]);
if (ok) {
printf("0");
rez(N, poz, 0);
return;
}
for (int j = 1; j <= B; ++ j)
if (comp(K, b[N][j]) <= 0) {
ok = true;
poz = j;
break;
} else
scade(K, b[N][j]);
printf("1");
rez(N, poz, 1);
}
int main (){
freopen("pavare2.in", "r", stdin);
freopen("pavare2.out", "w", stdout);
read();
init();
solve_a();
solve_b();
return 0;
}