#include<bits/stdc++.h>
using namespace std;
#define loop(a) for(int i=1;i<=a;i++)
#define doop(b) for(int j=1;j<=b;j++)
int n,m,a,b,ma[100][3],xi[100][3],jz;
bool qp[2100][2100];
bool zd[2010][2010];
inline int read() {
register int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void print(int x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9)print(x/10);
putchar(x%10+'0');
}
int dx[9]= {0,1,1,2,2,-1,-1,-2,-2};
int dy[9]= {0,2,-2,1,-1,2,-2,1,-1};
int cc[10001];
int cnt=0,ans=0;
void zh(int i,int b) {
while(i) {
cc[cnt++]=i%b;
i/=b;
}
}
void my(int x,int y) {
if(x>=1&&x<=n&&y>=1&&y<=m) qp[x][y]=true;
else return;
loop(8)
if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m)
qp[x+dx[i]][y+dy[i]]=true;
}
void xy(int x,int y) {
if(x>=1&&x<=n&&y>=1&&y<=m) qp[x][y]=true;
else return;
for(int k=x,l=y;k>=1&&l>=1&&!zd[k-1][l-1];k--,l--) qp[k][l]=1;
for(int k=x,l=y;k<=n&&l<=m&&!zd[k+1][l+1];k++,l++) qp[k][l]=1;
for(int k=x,l=y;k>=1&&l<=m&&!zd[k-1][l+1];k--,l++) qp[k][l]=1;
for(int k=x,l=y;k<=n&&l>=1&&!zd[k+1][l-1];k++,l--) qp[k][l]=1;
}
int main() {
n=read();
m=read();
a=read();
b=read();
loop(a) {
ma[i][1]=read();
ma[i][2]=read();
zd[ma[i][1]][ma[i][2]]=true;
}
loop(b) {
xi[i][1]=read();
xi[i][2]=read();
zd[xi[i][1]][xi[i][2]]=true;
}
loop(a) my(ma[i][1],ma[i][2]);
loop(b) xy(xi[i][1],xi[i][2]);
int tot=0;
loop(n)
doop(m)
if(!qp[i][j])
tot++;
jz=read();
zh(tot,jz);
if(tot<a+b)
cout<<"Oh my god!";
else
loop(cnt)
print(cc[i]);
return 0;
}