#include <bits/stdc++.h>
#define ll long long
#define L(i,a,b) for (int i=(a); i<=(b); i++)
#define R(i,a,b) for (int i=(a); i>=(b); i--)
#define INF 0x3f3f3f3f
#define pb push_back
#define MN 305
using namespace std;
int re() {
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)) {
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
return x*f;
}
void wr(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) wr(x/10);
putchar(x%10+'0');
}
int N,M,Q,mx[MN][MN],bit[MN][MN][MN];
void add(int x,int y,int k,int c) {
for (int i=x; i<=N; i+=i&-i)
for (int j=y; j<=M; j+=j&-j) bit[i][j][c]+=k;
}
int get(int x,int y,int c) {
int res=0;
for (int i=x; i; i-=i&-i)
for (int j=y; j; j-=j&-j)
res+=bit[x][y][c];
return res;
}
int main() {
N=re(),M=re();
L(i,1,N) L(j,1,M) {
mx[i][j]=re();
add(i,j,1,mx[i][j]);
}
Q=re();
while (Q--) {
int o,x1,y1,x2,y2,c;
o=re();
if (o==1) {
x1=re(),y1=re(),c=re();
add(x1,y1,-1,mx[x1][y1]);
add(x1,y1,1,c);
mx[x1][y1]=c;
} else {
x1=re(),x2=re(),y1=re(),y2=re(),c=re();
wr(get(x2,y2,c)-get(x1-1,y2,c)-get(x2,y1-1,c)+get(x1-1,y1-1,c));
putchar('\n');
}
}
return 0;
}