#include<bits/stdc++.h>
using namespace std;
long long pdd,n,m,k,q,x,y,xx,yy,vis[60][60],vi[60][60],viss[60][60],b[10][2],c[10],kkk,sum,lunshu,ans,fl=1,bh;
struct node{
long long a,b;
}a[60][60];
long long pd(long long x,long long y)
{
if(!((a[x][y].a==a[x+1][y].a && a[x+2][y].a==a[x+1][y].a) || (a[x][y].a==a[x+1][y].a && a[x-1][y].a==a[x+1][y].a) || (a[x][y].a==a[x-1][y].a && a[x-2][y].a==a[x-1][y].a) ||
(a[x][y].a==a[x][y-1].a && a[x][y-2].a==a[x][y].a) || (a[x][y].a==a[x][y-1].a && a[x][y+1].a==a[x][y].a) || (a[x][y].a==a[x][y+1].a && a[x][y+2].a==a[x][y].a)))
return 0;
else if(a[x][y].a==a[x+1][y].a && a[x+2][y].a==a[x+1][y].a)
return 1;
else if(a[x][y].a==a[x+1][y].a && a[x-1][y].a==a[x+1][y].a)
return 2;
else if(a[x][y].a==a[x-1][y].a && a[x-2][y].a==a[x-1][y].a)
return 3;
else if(a[x][y].a==a[x][y-1].a && a[x][y-2].a==a[x][y].a)
return 4;
else if(a[x][y].a==a[x][y-1].a && a[x][y+1].a==a[x][y].a)
return 5;
else
return 6;
}
void print1()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j].a<<" ";
cout<<endl;
}
}
void print2()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j].b<<" ";
cout<<endl;
}
}
void print3()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<vis[i][j]<<" ";
cout<<endl;
}
}
void down()
{
for(int i=n;i>=1;i--)
for(int j=1;j<=m;j++)
for(int k=i;k<=n;k++)
if(!a[k][j].a)
swap(a[k-1][j].a,a[k][j].a),swap(a[k-1][j].b,a[k][j].b);
}
void dfs(long long x,long long y,long long color)
{
bool pd=0;
if(x<1 || y<1 || x>n || y>m || !a[x][y].a)
return ;
if((a[x][y].a==a[x+1][y].a && a[x][y].a==a[x+2][y].a && a[x][y].a==color && (!vis[x][y] || !vis[x+1][y] || !vis[x+2][y])))
vis[x][y]=1,vis[x+1][y]=1,vis[x+2][y]=1,pd=1;
if((a[x][y].a==a[x+1][y].a && a[x][y].a==a[x-1][y].a && a[x][y].a==color && (!vis[x][y] || !vis[x+1][y] || !vis[x-1][y])))
vis[x][y]=1,vis[x+1][y]=1,vis[x-1][y]=1,pd=1;
if((a[x][y].a==a[x-1][y].a && a[x][y].a==a[x-2][y].a && a[x][y].a==color && (!vis[x][y] || !vis[x-1][y] || !vis[x-2][y])))
vis[x][y]=1,vis[x-1][y]=1,vis[x-2][y]=1,pd=1;
if((a[x][y].a==a[x][y+1].a && a[x][y].a==a[x][y+2].a && a[x][y].a==color && (!vis[x][y] || !vis[x][y+1] || !vis[x][y+2])))
vis[x][y]=1,vis[x][y+1]=1,vis[x][y+2]=1,pd=1;
if((a[x][y].a==a[x][y+1].a && a[x][y].a==a[x][y-1].a && a[x][y].a==color && (!vis[x][y] || !vis[x][y+1] || !vis[x][y-1])))
vis[x][y]=1,vis[x][y+1]=1,vis[x][y-1]=1,pd=1;
if((a[x][y].a==a[x][y-1].a && a[x][y].a==a[x][y-2].a && a[x][y].a==color && (!vis[x][y] || !vis[x][y-1] || !vis[x][y-2])))
vis[x][y]=1,vis[x][y-1]=1,vis[x][y-2]=1,pd=1;
if(!pd)
return ;
dfs(x,y-1,color),dfs(x,y-2,color),dfs(x,y+1,color),dfs(x,y+2,color);
dfs(x-1,y,color),dfs(x-2,y,color),dfs(x+1,y,color),dfs(x+2,y,color);
dfs(x-1,y-1,color),dfs(x-1,y+1,color),dfs(x+1,y-1,color),dfs(x+1,y+1,color);
}
long long _1(long long x);
long long _2(long long x);
long long _3(long long x,long long y);
long long _4(long long x,long long y);
long long _5(long long x,long long y);
long long _6(long long x,long long y);
long long _1(long long x)
{
long long sum=0;
for(int i=1;i<=m;i++)
{
long long co=a[x][i].a;
sum+=a[x][i].a,a[x][i].a=0;
if(a[x][i].b==2)
a[x][i].b=0,sum+=_2(i);
if(a[x][i].b==3)
a[x][i].b=0,sum+=_3(x,i);
if(a[x][i].b==4)
a[x][i].b=0,sum+=_4(x,i);
if(a[x][i].b==5)
a[x][i].b=0,sum+=_5(x,i);
if(a[x][i].b==6)
sum-=co,a[x][i].a=co,a[x][i].b=0,sum+=_6(x,i);
}
return sum;
}
long long _2(long long x)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
long long co=a[i][x].a;
sum+=a[i][x].a,a[i][x].a=0;
if(a[i][x].b==1)
a[i][x].b=0,sum+=_1(i);
if(a[i][x].b==3)
a[i][x].b=0,sum+=_3(i,x);
if(a[i][x].b==4)
a[i][x].b=0,sum+=_4(i,x);
if(a[i][x].b==5)
a[i][x].b=0,sum+=_5(i,x);
if(a[i][x].b==6)
sum-=co,a[i][x].a=co,a[i][x].b=0,sum+=_6(i,x);
}
return sum;
}
long long _3(long long x,long long y)
{
long long sum=0;
for(int i=1;i<=m;i++)
{
long long co=a[x][i].a;
sum+=a[x][i].a,a[x][i].a=0;
if(a[x][i].b==2)
a[x][i].b=0,sum+=_2(i);
if(a[x][i].b==3)
a[x][i].b=0,sum+=_3(x,i);
if(a[x][i].b==4)
a[x][i].b=0,sum+=_4(x,i);
if(a[x][i].b==5)
a[x][i].b=0,sum+=_5(x,i);
if(a[x][i].b==6)
sum-=co,a[x][i].a=co,a[x][i].b=0,sum+=_6(x,i);
}
for(int i=1;i<=n;i++)
{
long long co=a[i][y].a;
sum+=a[i][y].a,a[i][y].a=0;
if(a[i][y].b==1)
a[i][y].b=0,sum+=_1(i);
if(a[i][y].b==3)
a[i][y].b=0,sum+=_3(i,y);
if(a[i][y].b==4)
a[i][y].b=0,sum+=_4(i,y);
if(a[i][y].b==5)
a[i][y].b=0,sum+=_5(i,y);
if(a[i][y].b==6)
sum-=co,a[i][y].a=co,a[i][y].b=0,sum+=_6(i,y);
}
return sum;
}
long long _4(long long x,long long y)
{
long long sum=0;
for(int i=max(1ll,x-1);i<=min(n,x+1);i++)
{
for(int j=max(1ll,y-1);j<=min(n,y+1);j++)
{
long long co=a[i][j].a;
sum+=a[i][j].a,a[i][j].a=0;
if(a[i][j].b==1)
a[i][j].b=0,sum+=_1(i);
if(a[i][j].b==2)
a[i][j].b=0,sum+=_2(j);
if(a[i][j].b==3)
a[i][j].b=0,sum+=_3(i,j);
if(a[i][j].b==4)
a[i][j].b=0,sum+=_4(i,j);
if(a[i][j].b==5)
a[i][j].b=0,sum+=_5(i,j);
if(a[i][j].b==6)
sum-=co,a[i][j].a=co,a[i][j].b=0,sum+=_6(i,j);
}
}
return sum;
}
long long _5(long long x,long long y)
{
long long sum=0;
for(int i=max(1ll,x-2);i<=min(n,x+2);i++)
{
for(int j=max(1ll,y-2);j<=min(m,y+2);j++)
{
long long co=a[i][j].a;
sum+=a[i][j].a,a[i][j].a=0;
if(a[i][j].b==1)
a[i][j].b=0,sum+=_1(i);
if(a[i][j].b==2)
a[i][j].b=0,sum+=_2(j);
if(a[i][j].b==3)
a[i][j].b=0,sum+=_3(i,j);
if(a[i][j].b==4)
a[i][j].b=0,sum+=_4(i,j);
if(a[i][j].b==5)
a[i][j].b=0,sum+=_5(i,j);
if(a[i][j].b==6)
sum-=co,a[i][j].a=co,a[i][j].b=0,sum+=_6(i,j);
}
}
return sum;
}
long long _6(long long x,long long y)
{
long long sum=0,colour=a[x][y].a;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j].a==colour)
{
sum+=a[i][j].a,a[i][j].a=0;
if(a[i][j].b==1)
a[i][j].b=0,sum+=_1(i);
if(a[i][j].b==2)
a[i][j].b=0,sum+=_2(j);
if(a[i][j].b==3)
a[i][j].b=0,sum+=_3(i,j);
if(a[i][j].b==4)
a[i][j].b=0,sum+=_4(i,j);
if(a[i][j].b==5)
a[i][j].b=0,sum+=_5(i,j);
}
}
}
return sum;
}
bool check()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j].a)
if(pd(i,j))
return 1;
return 0;
}
long long wonderful_game()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j].a)
return 0;
return 10000;
}
long long wonderful_q()
{
if(!fl)
return 0;
return 1000;
}
void fqc(long long x,long long y,long long colo)
{
if(x<1 || y<1 || x>n || y>m || vi[x][y] || !colo || a[x][y].a!=colo)
return ;
sum++;
vi[x][y]=1;
fqc(x-1,y,colo);
fqc(x+1,y,colo);
fqc(x,y+1,colo);
fqc(x,y-1,colo);
}
void play(long long x,long long y,long long lunshu)
{
if(wonderful_game())
return ;
for(int i=0;i<=55;i++)
for(int j=0;j<=55;j++)
vis[i][j]=0,vi[i][j]=0,viss[i][j]=0;
dfs(x,y,a[x][y].a);
sum=0;
sum=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(vis[i][j])
viss[i][j]=a[i][j].a;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(vis[i][j])
{
sum=0;
fqc(i,j,viss[i][j]);
ans+=max(0ll,(max((sum-3),0ll)*max((sum-3)*50,0ll)));
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(vis[i][j])
{
long long co=a[i][j].a;
sum+=a[i][j].a,a[i][j].a=0;
if(a[i][j].b==1)
a[i][j].b=0,sum+=_1(i);
if(a[i][j].b==2)
a[i][j].b=0,sum+=_2(j);
if(a[i][j].b==3)
a[i][j].b=0,sum+=_3(i,j);
if(a[i][j].b==4)
a[i][j].b=0,sum+=_4(i,j);
if(a[i][j].b==5)
a[i][j].b=0,sum+=_5(i,j);
if(a[i][j].b==6)
a[i][j].a=co,sum-=co,a[i][j].b=0,sum+=_6(i,j);
}
}
}
ans+=sum*lunshu;
ans+=80*(lunshu-1)*(lunshu-1);
down();
if(check())
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j].a)
if(pd(i,j))
play(i,j,lunshu+1);
}
}
void solve(long long x,long long y,long long xx,long long yy)
{
if(wonderful_game())
return ;
pdd=1;
for(int i=0;i<=55;i++)
for(int j=0;j<=55;j++)
vis[i][j]=0;
dfs(x,y,a[x][y].a);
sum=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(vis[i][j])
sum++;
ans+=max(0ll,(max((sum-3),0ll)*max((sum-3),0ll)*50));
long long last=sum;
dfs(xx,yy,a[xx][yy].a);
sum=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(vis[i][j])
sum++;
ans+=max(0ll,(max((sum-last-3),0ll)*max((sum-last-3)*50,0ll)));
if(pd(x,y) && pd(xx,yy))
c[kkk]=1,b[kkk][0]=a[x][y].a,b[kkk++][1]=a[xx][yy].a,kkk%=5;
else if(pd(x,y))
c[kkk]=0,b[kkk++][0]=a[x][y].a,kkk%=5;
else if(pd(xx,yy))
c[kkk]=0,b[kkk++][0]=a[xx][yy].a,kkk%=5;
sum=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(vis[i][j])
{
long long co=a[i][j].a;
sum+=a[i][j].a,a[i][j].a=0;
if(a[i][j].b==1)
a[i][j].b=0,sum+=_1(i);
if(a[i][j].b==2)
a[i][j].b=0,sum+=_2(j);
if(a[i][j].b==3)
a[i][j].b=0,sum+=_3(i,j);
if(a[i][j].b==4)
a[i][j].b=0,sum+=_4(i,j);
if(a[i][j].b==5)
a[i][j].b=0,sum+=_5(i,j);
if(a[i][j].b==6)
a[i][j].a=co,sum-=co,a[i][j].b=0,sum+=_6(i,j);
}
}
}
ans+=sum*lunshu;
ans+=80*(lunshu-1)*(lunshu-1);
down();
if(check())
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j].a)
if(pd(i,j))
play(i,j,2);
}
}
long long five()
{
long long maxn=0;
for(int i=0;i<=c[0];i++)
{
for(int i2=0;i2<=c[1];i2++)
{
for(int i3=0;i3<=c[2];i3++)
{
for(int i4=0;i4<=c[3];i4++)
{
for(int i5=0;i5<=c[4];i5++)
{
long long su=0,d[110]={0},onemax=0,one=0,two=0,twomin=0,twomax=0,three=0,threemax=0,four=0,fourmax=0,five=0,fivemax=0;
if(i==0)
d[b[0][0]]++;
else
d[b[0][1]]++;
if(i2==0)
d[b[1][0]]++;
else
d[b[1][1]]++;
if(i3==0)
d[b[2][0]]++;
else
d[b[2][1]]++;
if(i4==0)
d[b[3][0]]++;
else
d[b[3][1]]++;
if(i5==0)
d[b[4][0]]++;
else
d[b[4][1]]++;
for(int j=0;j<=100;j++)
{
if(d[j]==1)
one++,onemax=j;
if(d[j]==2)
{
two++;
if(twomin==0)
twomin=j;
twomax=j;
}
if(d[j]==3)
three++,threemax=j;
if(d[j]==4)
four++,fourmax=j;
if(d[j]==5)
five++,fivemax=j;
}
if(one==5)
su+=onemax;
else if(two==1 && one==3)
su+=100+twomax*2;
else if(two==2 && one==1)
su+=200+twomax*2+twomin;
else if(three==1 && one==2)
su+=300+three*3;
else if(three==1 && two==1)
su+=500+threemax*3+twomax*2;
else if(four==1 && one==1)
su+=750+fourmax*5;
else if(five==1)
su+=1000+fivemax*10;
maxn=max(maxn,su);
}
}
}
}
}
return maxn;
}
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define QwQ return 0;
int main()
{
IOS;
cin>>n>>m>>k>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j].a;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j].b;
while(q--)
{
lunshu=1;
down();
cin>>x>>y>>xx>>yy;
swap(a[x][y].a,a[xx][yy].a),swap(a[x][y].b,a[xx][yy].b);
if(abs(x-xx)+abs(y-yy)==1 && a[x][y].a && a[xx][yy].a && x>=1 && x<=n && xx>=1 && xx<=n && y>=1 && yy>=1 && yy<=m && y<=m && (pd(x,y) || pd(xx,yy)))
solve(x,y,xx,yy);
else
swap(a[x][y].a,a[xx][yy].a),swap(a[x][y].b,a[xx][yy].b),fl=0;
if(kkk%5==0 && pdd)
ans+=five();
if(wonderful_game())
break;
}
cout<<ans+wonderful_game()+wonderful_q();
QwQ;
}