#include<stdio.h>
#include<unordered_map>
#include<vector>
using namespace std;
int offset[109];
int increaseRange[109];
inline int nmtoid(int n, int m){
if(n==1)return m-1;
if(n==2)return m+8;
if(n==3)return m+12;
if(n==4)return m+15;
return m+17+n-5;
}
inline int encode(int nmid, int di, int dj){
return (nmid * 9 + di) * 9 + dj;
}
inline void decode(int id, int& nmid, int& di, int& dj)
{
dj = id%9; id/=9;
di = id%9; id/=9;
nmid = id;
}
struct QType{
int id;
int of;
};
int n, m;
vector<QType> qlist[509][509];
void inil(){
int i, j, k, l;
offset[1] = 1;
increaseRange[1] = 1;
for(i=2;i<=9;i++){
offset[i] = offset[i-1] * 6;
increaseRange[i] = increaseRange[i-1] * 6 + 1;
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
for(k=1;k<=9;k++){
if(i+k<=n){
for(l=1;l<=9;l++){
if(k*l <= 9 && j+l<=m){
for(int di = 0; di < k; di++){
for(int dj = 0; dj < l; dj++){
QType q;
q.id = encode(nmtoid(k, l), di, dj);
q.of = offset[di * l + dj + 1];
qlist[i+di][j+dj].push_back(q);
}
}
}
}
}
}
}
}
}
int a[509][509];
int v[23][509][509];
unordered_map<int, int> ap[23];
int main()
{
int i, j, k;
scanf("%d %d",&n,&m);
inil();
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d",&a[i][j]);
a[i][j]--;
if(a[i][j]>0){
for(auto& q : qlist[i][j]){
int nmid;
int di;
int dj;
decode(q.id, nmid, di, dj);
v[nmid][i-di][j-dj] += q.of * a[i][j];
}
}
}
}
for(k=0;k<23;k++){
for(i=0;i<n;i++){
for(j=0;j<m;j++){
ap[k][v[k][i][j]]++;
}
}
}
int ql;
scanf("%d",&ql);
while(ql--){
int cmd;
scanf("%d",&cmd);
if(cmd==1){
scanf("%d %d %d",&i,&j,&k);
i--;j--;k--;
if(a[i][j] != k){
int dk = k - a[i][j];
a[i][j] = k;
for(const auto& q : qlist[i][j]){
int nmid;
int di;
int dj;
decode(q.id, nmid, di, dj);
int& me = v[nmid][i-di][j-dj];
ap[nmid][me]--;
me += q.of * dk;
ap[nmid][me]++;
}
}
}
else{
int r, c;
scanf("%d %d",&r,&c);
int rcid = nmtoid(r,c);
int me = 0;
int xk=0;
int mk=5;
for(i=0;i<r*c;i++){
scanf("%d",&k);
if(xk<k)xk=k;
if(mk>k)mk=k;
me+=k*offset[i+1];
}
int res=0;
for(int l = -mk; l < 5-xk; l++){
int te = me + l * increaseRange[r*c];
auto iter = ap[rcid].find(te);
if(iter != ap[rcid].end()){
res += iter->second;
}
}
printf("%d\n", res);
}
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGU8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgb2Zmc2V0WzEwOV07CmludCBpbmNyZWFzZVJhbmdlWzEwOV07CmlubGluZSBpbnQgbm10b2lkKGludCBuLCBpbnQgbSl7CiAgICBpZihuPT0xKXJldHVybiBtLTE7CiAgICBpZihuPT0yKXJldHVybiBtKzg7CiAgICBpZihuPT0zKXJldHVybiBtKzEyOwogICAgaWYobj09NClyZXR1cm4gbSsxNTsKICAgIHJldHVybiBtKzE3K24tNTsKfQppbmxpbmUgaW50IGVuY29kZShpbnQgbm1pZCwgaW50IGRpLCBpbnQgZGopewogICAgcmV0dXJuIChubWlkICogOSArIGRpKSAqIDkgKyBkajsKfQppbmxpbmUgdm9pZCBkZWNvZGUoaW50IGlkLCBpbnQmIG5taWQsIGludCYgZGksIGludCYgZGopCnsKICAgIGRqID0gaWQlOTsgaWQvPTk7CiAgICBkaSA9IGlkJTk7IGlkLz05OwogICAgbm1pZCA9IGlkOwp9CnN0cnVjdCBRVHlwZXsKICAgIGludCBpZDsKICAgIGludCBvZjsKfTsKaW50IG4sIG07CnZlY3RvcjxRVHlwZT4gcWxpc3RbNTA5XVs1MDldOwp2b2lkIGluaWwoKXsKICAgIGludCBpLCBqLCBrLCBsOwogICAgb2Zmc2V0WzFdID0gMTsKICAgIGluY3JlYXNlUmFuZ2VbMV0gPSAxOwogICAgZm9yKGk9MjtpPD05O2krKyl7CiAgICAgICAgb2Zmc2V0W2ldID0gb2Zmc2V0W2ktMV0gKiA2OwogICAgICAgIGluY3JlYXNlUmFuZ2VbaV0gPSBpbmNyZWFzZVJhbmdlW2ktMV0gKiA2ICsgMTsKICAgIH0KICAgIGZvcihpPTA7aTxuO2krKyl7CiAgICAgICAgZm9yKGo9MDtqPG07aisrKXsKICAgICAgICAgICAgZm9yKGs9MTtrPD05O2srKyl7CiAgICAgICAgICAgICAgICBpZihpK2s8PW4pewogICAgICAgICAgICAgICAgZm9yKGw9MTtsPD05O2wrKyl7CiAgICAgICAgICAgICAgICAgICAgaWYoaypsIDw9IDkgJiYgaitsPD1tKXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBkaSA9IDA7IGRpIDwgazsgZGkrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGRqID0gMDsgZGogPCBsOyBkaisrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVHlwZSBxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEuaWQgPSBlbmNvZGUobm10b2lkKGssIGwpLCBkaSwgZGopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEub2YgPSBvZmZzZXRbZGkgKiBsICsgZGogKyAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxbGlzdFtpK2RpXVtqK2RqXS5wdXNoX2JhY2socSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KaW50IGFbNTA5XVs1MDldOwppbnQgdlsyM11bNTA5XVs1MDldOwp1bm9yZGVyZWRfbWFwPGludCwgaW50PiBhcFsyM107CmludCBtYWluKCkKewogICAgaW50IGksIGosIGs7CiAgICBzY2FuZigiJWQgJWQiLCZuLCZtKTsKICAgIGluaWwoKTsKICAgIGZvcihpPTA7aTxuO2krKyl7CiAgICAgICAgZm9yKGo9MDtqPG07aisrKXsKICAgICAgICAgICAgc2NhbmYoIiVkIiwmYVtpXVtqXSk7CiAgICAgICAgICAgIGFbaV1bal0tLTsKICAgICAgICAgICAgaWYoYVtpXVtqXT4wKXsKICAgICAgICAgICAgZm9yKGF1dG8mIHEgOiBxbGlzdFtpXVtqXSl7CiAgICAgICAgICAgICAgICBpbnQgbm1pZDsKICAgICAgICAgICAgICAgIGludCBkaTsKICAgICAgICAgICAgICAgIGludCBkajsKICAgICAgICAgICAgICAgIGRlY29kZShxLmlkLCBubWlkLCBkaSwgZGopOwogICAgICAgICAgICAgICAgdltubWlkXVtpLWRpXVtqLWRqXSArPSBxLm9mICogYVtpXVtqXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yKGs9MDtrPDIzO2srKyl7CiAgICAgICAgZm9yKGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgZm9yKGo9MDtqPG07aisrKXsKICAgICAgICAgICAgICAgIGFwW2tdW3Zba11baV1bal1dKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgcWw7CiAgICBzY2FuZigiJWQiLCZxbCk7CiAgICB3aGlsZShxbC0tKXsKICAgICAgICBpbnQgY21kOwogICAgICAgIHNjYW5mKCIlZCIsJmNtZCk7CiAgICAgICAgaWYoY21kPT0xKXsKICAgICAgICAgICAgc2NhbmYoIiVkICVkICVkIiwmaSwmaiwmayk7CiAgICAgICAgICAgIGktLTtqLS07ay0tOwogICAgICAgICAgICBpZihhW2ldW2pdICE9IGspewogICAgICAgICAgICAgICAgaW50IGRrID0gayAtIGFbaV1bal07CiAgICAgICAgICAgICAgICBhW2ldW2pdID0gazsKICAgICAgICAgICAgICAgIGZvcihjb25zdCBhdXRvJiBxIDogcWxpc3RbaV1bal0pewogICAgICAgICAgICAgICAgICAgIGludCBubWlkOwogICAgICAgICAgICAgICAgICAgIGludCBkaTsKICAgICAgICAgICAgICAgICAgICBpbnQgZGo7CiAgICAgICAgICAgICAgICAgICAgZGVjb2RlKHEuaWQsIG5taWQsIGRpLCBkaik7CiAgICAgICAgICAgICAgICAgICAgaW50JiBtZSA9IHZbbm1pZF1baS1kaV1bai1kal07CiAgICAgICAgICAgICAgICAgICAgYXBbbm1pZF1bbWVdLS07CiAgICAgICAgICAgICAgICAgICAgbWUgKz0gcS5vZiAqIGRrOwogICAgICAgICAgICAgICAgICAgIGFwW25taWRdW21lXSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGludCByLCBjOwogICAgICAgICAgICBzY2FuZigiJWQgJWQiLCZyLCZjKTsKICAgICAgICAgICAgaW50IHJjaWQgPSBubXRvaWQocixjKTsKICAgICAgICAgICAgaW50IG1lID0gMDsKICAgICAgICAgICAgaW50IHhrPTA7CiAgICAgICAgICAgIGludCBtaz01OwogICAgICAgICAgICBmb3IoaT0wO2k8cipjO2krKyl7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZrKTsKICAgICAgICAgICAgICAgIGlmKHhrPGspeGs9azsKICAgICAgICAgICAgICAgIGlmKG1rPmspbWs9azsKICAgICAgICAgICAgICAgIG1lKz1rKm9mZnNldFtpKzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCByZXM9MDsKICAgICAgICAgICAgZm9yKGludCBsID0gLW1rOyBsIDwgNS14azsgbCsrKXsKICAgICAgICAgICAgICAgIGludCB0ZSA9IG1lICsgbCAqIGluY3JlYXNlUmFuZ2VbcipjXTsKICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IGFwW3JjaWRdLmZpbmQodGUpOwogICAgICAgICAgICAgICAgaWYoaXRlciAhPSBhcFtyY2lkXS5lbmQoKSl7CiAgICAgICAgICAgICAgICAgICAgcmVzICs9IGl0ZXItPnNlY29uZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGYoIiVkXG4iLCByZXMpOwogICAgICAgIH0KICAgIH0KfQo=