///등고선
/*
#include<stdio.h>
int main()
{
int N, X, Y, i, j, t, s, q;
int p[104][104]= {0};
scanf("%d", &N);
scanf("%d %d", &X, &Y);
for(i=0; i<N; i++)
{
p[X+i][Y]=i+1;
p[X-i][Y]=i+1;
p[X][Y+i]=i+1;
p[X][Y-i]=i+1;
///추가 필요!
q=t+s;
q=X+Y-i;
for(t=-q+1; t<=q; t++)
{
p[X+t][Y+s]=i+1;
}
}
///----------------------------------
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
printf("%d", p[i][j]);
}
printf("\n");
}
}
*/
/*
///생명게임
#include<stdio.h>
int main()
{
int p[27][27]= {0};
int q[27][27]= {0};
int i, j, s;
for(i=1; i<=25 ; i++)
{
for(j=1; j<=25; j++)
{
scanf("%d", &p[i][j]);
}
}
for(i=1; i<=25; i++)
{
for(j=1; j<=25; j++)
{
s=p[i-1][j]+p[i][j-1]+p[i+1][j]+p[i][j+1]+p[i-1][j-1]+p[i-1][j+1]+p[i+1][j+1]+p[i+1][j-1];
if(p[i][j]==0)
{
if(s==3)
{
q[i][j]=1;
}
else
{
q[i][j]=0;
}
}
else
{
if((s==2)||(s==3))
{
q[i][j]=1;
}
else
{
q[i][j]=0;
}
}
}
}
for(i=1; i<=25; i++)
{
for(j=1; j<=25; j++)
{
printf("%d ", q[i][j]);
}
printf("\n");
}
}
*/
/*
///정보대회 2회 - A - 미해결
#include<stdio.h>
int main()
{
long long int n, k, p, s;
int a[100004]= {0};
int i, j;
scanf("%lld %lld", &n, &k);
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
///------------
for(j=0; j<k; j++)
{
for(i=0; i<n-1; i++)
{
p=i+1;
if(a[i]<=a[p])
{
s=a[p];
}
else
{
s=a[i];
}
}
for(i=0; i<n; i++)
{
a[i]=s-a[i];
}
///100 50 -> 0 50 -> 50 0
///51 102 153 204 -> 153 102 51 0 ->
/// 134 -190 202 -> 68 392 0
}
///-----------
for(i=0; i<n; i++)
{
printf("%d ", a[i]);
}
}
*/
/*
///정보 모의대회 2회 - C - 해결
#include<stdio.h>
int main()
{
long long int n, k, x, y, i, t;
scanf("%lld %lld %lld", &x, &y, &n);
for(i=0; ;i++)
{
k=i*x+y;
if(k>n)
{
break;
}
else
{
t=k;
}
}
printf("%lld", t);
}
*/
/*
///정보 모의대회 2회 - B - 미해결
#include<stdio.h>
int main()
{
int n, i, j, k;
long long int a[100005]= {0};
int d;
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%lld", &a[i]);
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
{
if(i<j<k)
{
if((a[i]+a[j]<=a[k])||(a[k]+a[j]<=a[i])||(a[i]+a[k]<=a[j]))
{
d=1;
break;
}
else
{
d=0;
}
}
}
if(d==1)
{
break;
}
}
if(d==1)
{
break;
}
}
if(d==1)
{
printf("Yes");
}
else
{
printf("No");
}
///printf("Yes"); break;
}
*/
/*
/// H - solved!
#include<stdio.h>
int main()
{
long long int n, p=0;
scanf("%lld", &n);
p=n/2;
if(n%2==0)
{
printf("%lld", p-1);
}
else
{
printf("%lld", p);
}
}
///n개의 사탕
///(큰 동생, 작은 동생)=(n-1, 1), (n-2, 2) .... 1. n%2==0이라면 (n/2+1, n/2-1) /// 2. n%2==1이라면 {n/2+1, n/2)
*/
/*
///등고선 재시도
#include<stdio.h>
int main()
{
int N, X, Y, i, j, a, b;
int p[105][105]= {0};
scanf("%d %d %d", &N, &X, &Y);
p[X][Y]=1;
/*
for(i=Y-1; i>=1; i--) {
p[X][i] = p[X][i+1]+1;
}
*/
/*
/// X, Y 바로 왼쪽 줄 부터 숫자 넣기
for(j=1; j<=100; j++)
{
for(i=0; i<=100; i++)
{
if(i-X<0)
{
a=X-i;
}
else
{
a=i-X;
}
p[i][Y-j]=j+a+1;
}
}
///X Y 바로 오른쪽 줄 부터 숫자 넣기
for(j=1; j<=100; j++)
{
for(i=0; i<=100; i++)
{
if(i-X<0)
{
a=X-i;
}
else
{
a=i-X;
}
p[i][Y+j]=j+a+1;
}
}
/// X, Y 줄 아래 숫자 넣기
for(i=X+1; i<=100; i++)
{
a=i-X;
p[i][Y]=a+1;
}
/// X Y 줄 위 숫자 넣기 ]
for(i=X-1; i>=0; i--)
{
a=X-i;
p[i][Y]=a+1;
}
for(i=1; i<=N; i++)
{
for(j=1; j<=N; j++)
{
a = i>X? i-X : X-i;
b = j>Y? j-Y : Y-j;
printf("%d ", a+b+1);
//printf("%d ", p[i][j]);
}
printf("\n");
}
}
*/
///생명게임 2 - not solved!!
#include<stdio.h>
int main()
{
int p[180][180]= {0};
int q[180][180]= {0};
int i, j, s, a, b, k, x, y, z, t;
scanf("%d %d", &a, &b);
scanf("%d %d %d", &x, &y, &z);
for(i=1; i<=a ; i++)
{
for(j=1; j<=b; j++)
{
scanf("%d", &p[i][j]);
}
}
scanf("%d", &k);
for(t=0; t<k; t++)
{
for(i=1; i<=25; i++)
{
for(j=1; j<=25; j++)
{
s=p[i-1][j]+p[i][j-1]+p[i+1][j]+p[i][j+1]+p[i-1][j-1]+p[i-1][j+1]+p[i+1][j+1]+p[i+1][j-1];
if(p[i][j]==0)
{
if(s==x)
{
q[i][j]=1;
}
else
{
q[i][j]=0;
}
}
else
{
if(y>=z)
{
if(s>=y)
{
q[i][j]=1;
}
else if(s>=z)
{
q[i][j]=0;
}
}
else
{
if(s>=z)
{
q[i][j]=0;
}
else if(s>=y)
{
q[i][j]=1;
}
}
}
}
}
for(i=1; i<=a; i++)
{
for(j=1; j<=b; j++)
{
p[i][j]=q[i][j];
q[i][j]=0;
}
}
}
for(i=1; i<=a; i++)
{
for(j=1; j<=b; j++)
{
printf("%d ", p[i][j]);
}
printf("\n");
}
}