#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e6 + 10;
int A,B,C,m,Num[N];
int Damage[N >> 1][8],Dx[N];
int dir[8][4] =
{
{0,0,0,1},
{0,0,1,-1},
{0,1,0,-1},
{0,1,1,1},
{1,0,0,-1},
{1,0,1,1},
{1,1,0,1},
{1,1,1,-1},
};
int iint(int i,int j,int k){return (i * B + j) * C + k;}
bool P_sum()
{
memset(Num,0,sizeof(Num));
for(int i=1;i<=A;i++)
{
for(int j=1;j<=B;j++)
{
for(int k=1;k<=C;k++)
{
Num[iint(i,j,k)] = Dx[iint(i,j,k)];
for(int p=1;p<8;p++)
{
int fx = i - dir[p][0];
int fy = j - dir[p][1];
int fz = k - dir[p][2];
int fw = dir[p][3];
Num[iint(i,j,k)] -= Num[iint(fx,fy,fz)] * fw;
}
if(Num[iint(i,j,k)] < 0)
return true;
}
}
}
return false;
}
bool check(int x)
{
for(int i=1;i<=x;i++)
{
int u1 = Damage[i][0],u2 = Damage[i][1];
int v1 = Damage[i][2],v2 = Damage[i][3];
int w1 = Damage[i][4],w2 = Damage[i][5];
int P_D = Damage[i][6];
Dx[iint(u1,v1,w1)] += -P_D;
Dx[iint(u1,v1,w2 + 1)] -= -P_D;
Dx[iint(u1,v2 + 1,w1)] -= -P_D;
Dx[iint(u1,v2 + 1,w2 + 1)] += -P_D;
Dx[iint(u2 + 1,v1,w1)] -= -P_D;
Dx[iint(u2 + 1,v1,w2 + 1)] += -P_D;
Dx[iint(u2 + 1,v2 + 1,w1)] += -P_D;
Dx[iint(u2 + 1,v2 + 1,w2 + 1)] -= -P_D;
}
return P_sum();
}
signed main()
{
scanf("%lld%lld%lld%lld",&A,&B,&C,&m);
for(int i=1;i<=A;i++)
for(int j=1;j<=B;j++)
for(int k=1;k<=C;k++)
scanf("%lld",&Num[iint(i,j,k)]);
for(int i=1;i<=m;i++)
for(int j=0;j<7;j++)
scanf("%lld",&Damage[i][j]);
for(int i=1;i<=A;i++)
{
for(int j=1;j<=B;j++)
{
for(int k=1;k<=C;k++)
{
for(int p=0;p<8;p++)
{
int fx = i - dir[p][0];
int fy = j - dir[p][1];
int fz = k - dir[p][2];
int fw = dir[p][3];
Dx[iint(i,j,k)] += Num[iint(fx,fy,fz)] * fw;
}
}
}
}
int l = 1,r = m;
while(l < r)
{
int mid = l + r >> 1;
if(check(mid))
r = mid;
else
l = mid + 1;
}
printf("%lld\n",r + 1);
return 0;
}