#include<memory.h>
using namespace std;
char a[70][100][100];
const int moveX[8]={-1,-1,0,1,1,1,0,-1};
const int moveY[8]={0,1,1,1,0,-1,-1,-1};
int Init(int height,int width)
{
int i,j;
memset(a,70*height*width,'0');
for (i=0; i<height; i++)
{
for (j=0; j<width; j++)
{
cin>>a[1][i][j];
}
}
return 0;
}
bool judge(int k,int i,int j,int height,int width)
{
if ((i+moveX[k]>=height) || (i+moveX[k]<0) || (j+moveY[k]>=width) || (j+moveY[k]<0)){
return false;
}
else return true;
}
int deal(int now,int height,int width,int NumLive,int NumKeep)
{
int i,j,k,t;
for (i=0; i<height; i++)
{
for (j=0; j<width; j++)
{
t = 0;
for (k=0; k<8; k++)
{
if (judge(k,i,j,height,width)){
if (a[now][i+moveX[k]][j+moveY[k]] != '0'){
t++;
}
}
}
if (t==NumLive){
a[now+1][i][j] = '1';
}
else if (t==NumKeep){
a[now+1][i][j] = a[now][i][j];
}
else {
a[now+1][i][j] = '0';
}
}
}
return 0;
}
int print(int now,int height,int width)
{
int i,j;
for (i=0; i<height; i++)
{
for (j=0; j<width; j++)
{
cout<<a[now][i][j];
}
cout<<endl;
}
}
int main()
{
int height,width,t,now=1;
cin>>width>>height>>t;
Init(height,width);
while (now<t)
{
deal(now,height,width,3,2);
now++;
}
print(now,height,width);
return 0;
}