#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
const int maxN=1e3+5;
struct ez
{
int sum, mn, mx;
};
int n, m, q, a[maxN][maxN];
ez segtree[4*maxN][4*maxN];
ez merge_segtree(ez l, ez r)
{
ez res;
res.sum=l.sum+r.sum;
res.mn=min(l.mn, r.mn);
res.mx=max(l.mx, r.mx);
return res;
}
void build_y(int nodex, int lx, int rx, int nodey, int ly, int ry)
{
if(ly==ry)
{
if(lx==rx) segtree[nodex][nodey].mn=segtree[nodex][nodey].sum=segtree[nodex][nodey].mx=a[lx][ly];
else segtree[nodex][nodey]=merge_segtree(segtree[nodex*2][nodey],segtree[nodex*2+1][nodey]);
}
else
{
int midy=(ly+ry)>>1;
build_y(nodex, lx, rx, nodey*2, ly, midy);
build_y(nodex, lx, rx, nodey*2+1, midy+1, ry);
segtree[nodex][nodey]=merge_segtree(segtree[nodex][nodey*2],segtree[nodex][nodey*2+1]);
}
}
void build_x(int nodex, int lx, int rx)
{
if(lx!=rx)
{
int midx=(lx+rx)>>1;
build_x(nodex*2, lx, midx);
build_x(nodex*2+1, midx+1, rx);
}
build_y(nodex, lx, rx, 1, 1, m);
}
void update_y(int nodex, int lx, int rx, int nodey, int ly, int ry, int x, int y, int val)
{
if(ly==ry)
{
if(lx==rx) segtree[nodex][nodey].mn=segtree[nodex][nodey].sum=segtree[nodex][nodey].mx=val;
else segtree[nodex][nodey]=merge_segtree(segtree[nodex*2][nodey],segtree[nodex*2+1][nodey]);
}
else
{
int midy=(ly+ry)>>1;
if(y<=midy) update_y(nodex, lx, rx, nodey*2, ly, midy, x, y, val);
else update_y(nodex, lx, rx, nodey*2+1, midy+1, ry, x, y, val);
segtree[nodex][nodey]=merge_segtree(segtree[nodex][nodey*2],segtree[nodex][nodey*2+1]);
}
}
void update_x(int nodex, int lx, int rx, int x, int y, int val)
{
if(lx!=rx)
{
int midx=(lx+rx)>>1;
if(x<=midx) update_x(nodex*2, lx, midx, x, y, val);
else update_x(nodex*2+1, midx+1, rx, x, y, val);
}
update_y(nodex, lx, rx, 1, 1, m, x, y, val);
}
ez get_y(int nodex, int nodey, int tl_y, int tr_y, int ly, int ry)
{
if(ly>ry) return {0,(int)1e18,(int)-1e18};
if(tl_y==ly && tr_y==ry) return segtree[nodex][nodey];
int tmid_y=(tl_y+tr_y)>>1;
return merge_segtree(get_y(nodex, nodey*2, tl_y, tmid_y, ly, min(tmid_y, ry)),
get_y(nodex, nodey*2+1, tmid_y+1, tr_y, max(ly, tmid_y+1), ry));
}
ez get_x(int nodex, int tlx, int trx, int lx, int rx, int ly, int ry)
{
if(lx>rx) return {0,(int)1e18,(int)-1e18};
if(lx==tlx && rx==trx) return get_y(nodex, 1, 1, m, ly, ry);
int tmidx=(tlx+trx)>>1;
return merge_segtree(get_x(nodex*2, tlx, tmidx, lx, min(rx,tmidx), ly, ry),
get_x(nodex*2+1, tmidx+1, trx, max(lx, tmidx+1), rx, ly, ry));
}
void solve()
{
build_x(1,1,n);
while(q--)
{
int type; cin>>type;
if(type==1)
{
int l,r,x; cin>>l>>r>>x;
update_x(1,1,n,l,r,x);
}
else
{
int lx,rx,ly,ry; cin>>lx>>ly>>rx>>ry;
if(type==2) cout<<get_x(1,1,n,lx,rx,ly,ry).sum<<'\n';
if(type==3) cout<<get_x(1,1,n,lx,rx,ly,ry).mx<<'\n';
if(type==4) cout<<get_x(1,1,n,lx,rx,ly,ry).mn<<'\n';
}
}
}
int32_t main()
{
cin>>n>>m>>q;
for(int i=1; i<=n; i+=1)
{
for(int j=1; j<=m; j+=1)
{
cin>>a[i][j];
}
}
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCmNvbnN0IGludCBtYXhOPTFlMys1OwpzdHJ1Y3QgZXogCnsKCWludCBzdW0sIG1uLCBteDsKfTsKaW50IG4sIG0sIHEsIGFbbWF4Tl1bbWF4Tl07IApleiBzZWd0cmVlWzQqbWF4Tl1bNCptYXhOXTsKCmV6IG1lcmdlX3NlZ3RyZWUoZXogbCwgZXogcikKewoJZXogcmVzOwoJcmVzLnN1bT1sLnN1bStyLnN1bTsKCXJlcy5tbj1taW4obC5tbiwgci5tbik7CglyZXMubXg9bWF4KGwubXgsIHIubXgpOwoJcmV0dXJuIHJlczsKfQoKdm9pZCBidWlsZF95KGludCBub2RleCwgaW50IGx4LCBpbnQgcngsIGludCBub2RleSwgaW50IGx5LCBpbnQgcnkpCnsKCWlmKGx5PT1yeSkKCXsKCQlpZihseD09cngpIHNlZ3RyZWVbbm9kZXhdW25vZGV5XS5tbj1zZWd0cmVlW25vZGV4XVtub2RleV0uc3VtPXNlZ3RyZWVbbm9kZXhdW25vZGV5XS5teD1hW2x4XVtseV07CgkJZWxzZSBzZWd0cmVlW25vZGV4XVtub2RleV09bWVyZ2Vfc2VndHJlZShzZWd0cmVlW25vZGV4KjJdW25vZGV5XSxzZWd0cmVlW25vZGV4KjIrMV1bbm9kZXldKTsKCX0KCWVsc2UKCXsKCQlpbnQgbWlkeT0obHkrcnkpPj4xOwoJCWJ1aWxkX3kobm9kZXgsIGx4LCByeCwgbm9kZXkqMiwgbHksIG1pZHkpOwoJCWJ1aWxkX3kobm9kZXgsIGx4LCByeCwgbm9kZXkqMisxLCBtaWR5KzEsIHJ5KTsKCQlzZWd0cmVlW25vZGV4XVtub2RleV09bWVyZ2Vfc2VndHJlZShzZWd0cmVlW25vZGV4XVtub2RleSoyXSxzZWd0cmVlW25vZGV4XVtub2RleSoyKzFdKTsKCX0KfQoKdm9pZCBidWlsZF94KGludCBub2RleCwgaW50IGx4LCBpbnQgcngpCnsKCWlmKGx4IT1yeCkKCXsKCQlpbnQgbWlkeD0obHgrcngpPj4xOwoJCWJ1aWxkX3gobm9kZXgqMiwgbHgsIG1pZHgpOwoJCWJ1aWxkX3gobm9kZXgqMisxLCBtaWR4KzEsIHJ4KTsKCX0KCWJ1aWxkX3kobm9kZXgsIGx4LCByeCwgMSwgMSwgbSk7Cn0KCnZvaWQgdXBkYXRlX3koaW50IG5vZGV4LCBpbnQgbHgsIGludCByeCwgaW50IG5vZGV5LCBpbnQgbHksIGludCByeSwgaW50IHgsIGludCB5LCBpbnQgdmFsKQp7CglpZihseT09cnkpCgl7CgkJaWYobHg9PXJ4KSBzZWd0cmVlW25vZGV4XVtub2RleV0ubW49c2VndHJlZVtub2RleF1bbm9kZXldLnN1bT1zZWd0cmVlW25vZGV4XVtub2RleV0ubXg9dmFsOwoJCWVsc2Ugc2VndHJlZVtub2RleF1bbm9kZXldPW1lcmdlX3NlZ3RyZWUoc2VndHJlZVtub2RleCoyXVtub2RleV0sc2VndHJlZVtub2RleCoyKzFdW25vZGV5XSk7Cgl9CgllbHNlCgl7CgkJaW50IG1pZHk9KGx5K3J5KT4+MTsKCQlpZih5PD1taWR5KSB1cGRhdGVfeShub2RleCwgbHgsIHJ4LCBub2RleSoyLCBseSwgbWlkeSwgeCwgeSwgdmFsKTsKCQllbHNlIHVwZGF0ZV95KG5vZGV4LCBseCwgcngsIG5vZGV5KjIrMSwgbWlkeSsxLCByeSwgeCwgeSwgdmFsKTsKCQlzZWd0cmVlW25vZGV4XVtub2RleV09bWVyZ2Vfc2VndHJlZShzZWd0cmVlW25vZGV4XVtub2RleSoyXSxzZWd0cmVlW25vZGV4XVtub2RleSoyKzFdKTsKCX0KfQoKdm9pZCB1cGRhdGVfeChpbnQgbm9kZXgsIGludCBseCwgaW50IHJ4LCBpbnQgeCwgaW50IHksIGludCB2YWwpCnsKCWlmKGx4IT1yeCkKCXsKCQlpbnQgbWlkeD0obHgrcngpPj4xOwoJCWlmKHg8PW1pZHgpIHVwZGF0ZV94KG5vZGV4KjIsIGx4LCBtaWR4LCB4LCB5LCB2YWwpOwoJCWVsc2UgdXBkYXRlX3gobm9kZXgqMisxLCBtaWR4KzEsIHJ4LCB4LCB5LCB2YWwpOwoJfQoJdXBkYXRlX3kobm9kZXgsIGx4LCByeCwgMSwgMSwgbSwgeCwgeSwgdmFsKTsKfQoKZXogZ2V0X3koaW50IG5vZGV4LCBpbnQgbm9kZXksIGludCB0bF95LCBpbnQgdHJfeSwgaW50IGx5LCBpbnQgcnkpCnsKCWlmKGx5PnJ5KSByZXR1cm4gezAsKGludCkxZTE4LChpbnQpLTFlMTh9OwoJaWYodGxfeT09bHkgJiYgdHJfeT09cnkpIHJldHVybiBzZWd0cmVlW25vZGV4XVtub2RleV07CglpbnQgdG1pZF95PSh0bF95K3RyX3kpPj4xOwoJcmV0dXJuIG1lcmdlX3NlZ3RyZWUoZ2V0X3kobm9kZXgsIG5vZGV5KjIsIHRsX3ksIHRtaWRfeSwgbHksIG1pbih0bWlkX3ksIHJ5KSksCglnZXRfeShub2RleCwgbm9kZXkqMisxLCB0bWlkX3krMSwgdHJfeSwgbWF4KGx5LCB0bWlkX3krMSksIHJ5KSk7Cn0KCmV6IGdldF94KGludCBub2RleCwgaW50IHRseCwgaW50IHRyeCwgaW50IGx4LCBpbnQgcngsIGludCBseSwgaW50IHJ5KQp7CglpZihseD5yeCkgcmV0dXJuIHswLChpbnQpMWUxOCwoaW50KS0xZTE4fTsKCWlmKGx4PT10bHggJiYgcng9PXRyeCkgcmV0dXJuIGdldF95KG5vZGV4LCAxLCAxLCBtLCBseSwgcnkpOwoJaW50IHRtaWR4PSh0bHgrdHJ4KT4+MTsKCXJldHVybiBtZXJnZV9zZWd0cmVlKGdldF94KG5vZGV4KjIsIHRseCwgdG1pZHgsIGx4LCBtaW4ocngsdG1pZHgpLCBseSwgcnkpLAoJZ2V0X3gobm9kZXgqMisxLCB0bWlkeCsxLCB0cngsIG1heChseCwgdG1pZHgrMSksIHJ4LCBseSwgcnkpKTsKfQoKCnZvaWQgc29sdmUoKQp7CglidWlsZF94KDEsMSxuKTsKCXdoaWxlKHEtLSkKCXsKCQlpbnQgdHlwZTsgY2luPj50eXBlOwoJCWlmKHR5cGU9PTEpCgkJewoJCQlpbnQgbCxyLHg7IGNpbj4+bD4+cj4+eDsKCQkJdXBkYXRlX3goMSwxLG4sbCxyLHgpOwoJCX0KCQllbHNlCgkJewoJCQlpbnQgbHgscngsbHkscnk7IGNpbj4+bHg+Pmx5Pj5yeD4+cnk7CgkJCWlmKHR5cGU9PTIpIGNvdXQ8PGdldF94KDEsMSxuLGx4LHJ4LGx5LHJ5KS5zdW08PCdcbic7CgkJCWlmKHR5cGU9PTMpIGNvdXQ8PGdldF94KDEsMSxuLGx4LHJ4LGx5LHJ5KS5teDw8J1xuJzsKCQkJaWYodHlwZT09NCkgY291dDw8Z2V0X3goMSwxLG4sbHgscngsbHkscnkpLm1uPDwnXG4nOwoJCX0KCX0KfQoKaW50MzJfdCBtYWluKCkKewoJY2luPj5uPj5tPj5xOwoJZm9yKGludCBpPTE7IGk8PW47IGkrPTEpCgl7CgkJZm9yKGludCBqPTE7IGo8PW07IGorPTEpCgkJewoJCQljaW4+PmFbaV1bal07CgkJfQoJfQoJc29sdmUoKTsKfQ==