#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,t,px,py,flag,id[500005];
ll a[500005];
#define lc k<<1
#define rc k<<1|1
#define ls lc,l,mid
#define rs rc,mid+1,r
struct zhx{
vector<ll>tree;
inline void pushup(int k){tree[k]=__gcd(tree[lc],tree[rc]);}
inline void change2(int x,ll d){
if(x>m) return ;
x=id[x];
tree[x]+=d;
x>>=1;
while(x){
pushup(x);
x>>=1;
}
}
inline ll query2(int k,int l,int r,int x,int y){
if(x>y) return 0ll;
if(x<=l&&r<=y) return tree[k];
int mid=l+r>>1;
if(x<=mid&&mid<y) return __gcd(query2(ls,x,y),query2(rs,x,y));
if(x<=mid) return query2(ls,x,y);
return query2(rs,x,y);
}
vector<ll>c;
inline void change1(int x,ll d){for(;x<=m;x+=(x&(-x)))c[x]+=d;}
inline ll query1(int x){ll res=0;for(;x;x-=(x&(-x)))res+=c[x];return res;}
}qwq[709];
char *p1,*p2,buf[10000005];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,10000000,stdin),p1==p2)?EOF:*p1++)
ll read(){
ll x=0,f=1;char ch=nc();
while(ch<48||ch>57){if(ch=='-')f=-1;ch=nc();}
while(ch>=48&&ch<=57)x=x*10+ch-48,ch=nc();
return x*f;
}
void pre(int k,int l,int r){
if(l==r){
id[l]=k;
return ;
}
int mid=l+r>>1;
pre(ls);
pre(rs);
}
signed main(){
n=read(),m=read(),px=read(),py=read(),t=read();
if(n>m){
flag=1;
swap(n,m);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m*4+5;j++)
qwq[i].tree.push_back(0ll);
for(int i=1;i<=n;i++)
for(int j=1;j<=m+5;j++)
qwq[i].c.push_back(0ll);
pre(1,1,m);
if(flag){
for(int i=1;i<=m;i++){
ll x;
for(int j=1;j<=n;j++){
x=read();
qwq[j].change1(i,x-a[j]);
qwq[j].change2(i,x-a[j]);
a[j]=x;
}
}
}
else{
for(int i=1;i<=n;i++){
ll las=0,x;
for(int j=1;j<=m;j++){
x=read();
qwq[i].change1(j,x-las);
qwq[i].change2(j,x-las);
las=x;
}
}
}
int op,x1,x2,y1,y2;
ll res,v;
while(t--){
op=read();
if(!op){
x1=read(),y1=read(),x2=read(),y2=read();
x1=px-x1,x2=px+x2;
y1=py-y1,y2=py+y2;
if(flag) swap(x1,y1),swap(x2,y2);
res=0;
for(int i=x1;i<=x2;i++)
res=__gcd(res,__gcd(qwq[i].query1(y1),qwq[i].query2(1,1,m,y1+1,y2)));
res=abs(res);
printf("%lld\n",res);
}
else{
x1=read(),y1=read(),x2=read(),y2=read(),v=read();
if(flag) swap(x1,y1),swap(x2,y2);
for(int i=x1;i<=x2;i++)
qwq[i].change1(y1,v),qwq[i].change1(y2+1,-v),qwq[i].change2(y1,v),qwq[i].change2(y2+1,-v);
}
}
return 0;
}