#include<iostream>
using namespace std;
int main(){
int container[15][10];
int pattern[4][4];
int offset;
//默认空余行为14
int col[4]={14,14,14,14};
//注意:默认15,原因:如果ma过小,当col=1,ma=-2(此列无1)时有可能会产生sub最小可能性。要求0+ma<14
int ma[4]={-15,-15,-15,-15};
//输入数据
for(int i=0; i<15; i++)
for(int j=0; j<10; j++)
cin>>container[i][j];
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
cin>>pattern[i][j];
cin>>offset;
offset--; //数组是从0开始,减一
//找到当前列还剩余的空余行
for(int i=offset; i<offset+4; i++){
for(int j=0; j<15; j++){
if(container[j][i]==1){
col[i-offset]=j-1;
break;
}
}
}
//找到当前列值为1的最大行
for(int i=0; i<4; i++){
for(int j=0; j<4; j++){
if(pattern[j][i]==1)
ma[i]=j;
}
}
//找出空余行col减去最大行ma中的最小值
int sub=15,loc;
for(int i=0;i<4;i++){
if(col[i]-ma[i]<sub){
sub=col[i]-ma[i];
loc=i;
}
}
//覆盖数据
int base = col[loc] - ma[loc];
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(pattern[i][j]==1)
container[base+i][offset+j] = pattern[i][j];
}
}
//输出
for(int i=0; i<15; i++){
for(int j=0; j<10; j++){
cout<<container[i][j]<<" ";
}
cout<<endl;
}
}