#include<bits/stdc++.h>
using namespace std;
const int N=2000005;
struct qwq{
	int a,b;
	inline qwq(){}
	inline qwq(int a,int b):a(a),b(b){}
}s[N],t[N];
int a[N];
char c[N>>1];
int main(){
	int ss=0,ts=0,n,y,z,m,k,i,j,p;
	scanf("%d%d%d%s",&n,&m,&k,c+1);--k;
	for(i=1,j=n;j;++i,--j)if(c[j]=='1')a[i] =1;
	scanf("%s",c+1);
	for(i=1,j=m;j;++i,--j)if(c[j]=='1')a[i]|=2;
//	printf("n=%d k=%d\n",n,k);
//	for(i=1;i<=max(n,m);++i)printf("%d ",a[i]);printf("A\n");
	s[0].b=1000000000;
	for(i=n=max(n,m);i;--i)if(a[i]){
		if(a[i]==3){
//			printf("SOLVE i=%d\n",i);
			m=i;y=3;z=k;
			while(1){
//				printf("y=%d z=%d m=%d ss=%d cur=(%d,%d)\n",y,z,m+1,ss,s[ss].a,s[ss].b);
				if((++m)!=s[ss].b){
					if(y==3){
//						printf("zeros z=%d p=%d\n",z,s[ss].b-m);
						if(z>=(p=s[ss].b-m)){z-=p;m=s[ss].b;}
						else{s[++ss]=qwq(3,m+z);break;}
					}else{
						s[++ss]=qwq(y,m);
						break;
					}
				}
//				printf("nonzero z=%d\n",z);
				if(y==3){
					t[++ts]=qwq((y=s[ss--].a)^3,m);
				}else if(y==s[ss].a){
					--ss;
				}else{
					if(z--){--ss;y=3;}
					else{s[ss].a=3;break;}
				}
			}
			while(ts)s[++ss]=t[ts--];
		}else s[++ss]=qwq(a[i],i);
//		printf("DBG i=%d\n",i);
//		for(j=ss;j;--j)printf("(%d,%d)\n",s[j].a,s[j].b);
	}
	n+=k+1;
	memset(a,0,sizeof(a));
	for(;ss;--ss)a[s[ss].b]=s[ss].a;
//	for(i=1;i<=n;++i)printf("%d ",a[i]);printf("ANS\n");
	for(i=n;i;--i)if(a[i]&1)break;for(;i;--i)putchar((a[i]   &1)|48);puts("");
	for(i=n;i;--i)if(a[i]&2)break;for(;i;--i)putchar((a[i]>>1&1)|48);puts("");
	return 0;
}