#include<bits/stdc++.h>
using namespace std;
const int N=50001,M=50001*2;
int n,m,q,ans,t;
int pos;
int to[6][M],h[6][N],nxt[6][M],tot,op[6][M];
int lv[6][N],c[6][N];
bool b[N];
bool v[6][M];
bool d[M];
int di(int x,int y){
return (x-1)*m+y;
}
void add(int x,int y,int z){
to[t][++tot]=y;
op[t][tot]=z;
nxt[t][tot]=h[t][x];
h[t][x]=tot;
}
void dfs(int co,int l,int x,int pah){
d[x]=1;
for(int i=h[t][x];i;i=nxt[t][i]){
int y=to[t][i];
if((pah>0&&pah!=op[t][i])||b[y]) continue;
if(lv[t][y]){
if(lv[t][y]<=l&&co!=c[t][y]){
if(!b[y]) ans++;
b[y]=1;
continue;
}
b[y]=1;
continue;
}
if(v[op[t][i]][y]) continue;
if(!d[y]) ans++;
d[y]=v[op[t][i]][y]=1;
if(op[t][i]!=1) dfs(co,l,y,op[t][i]);
}
}
int main(){
// freopen("chess.in","r",stdin);
// freopen("chess.out","w",stdout);
scanf("%d",&t);
while(t){
t--;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++){
getchar();
for(int j=1;j<=m-1;j++){
char ch=getchar();
if(ch!='0'){
add(di(i,j),di(i,j+1),ch-'0');
add(di(i,j+1),di(i,j),ch-'0');
}
}
}
for(int i=1;i<=n-1;i++){
getchar();
for(int j=1;j<=m;j++){
char ch=getchar();
if(ch=='2') ch='4';
if(ch!='0') {
add(di(i,j),di(i+1,j),ch-'0');
add(di(i+1,j),di(i,j),ch-'0');
}
}
}
for(int i=1,x,y,l,co;i<=q;i++){
memset(v,0,sizeof(v));
memset(d,0,sizeof(d));
memset(b,0,sizeof(b));
ans=0;
scanf("%d%d%d%d",&co,&l,&x,&y);
dfs(co,l,di(x,y),-1);
printf("%d\n",ans);
lv[t][di(x,y)]=l;
c[t][di(x,y)]=co;
}
}
return 0;
}