#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 1003
#define maxc 207
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
struct BIT2D{
int m,n;
vector< vector<int> > bit;
BIT2D(const int &M,const int &N): m(M), n(N), bit(M+1,vector<int>(N+1)) {};
void update(int x,int y,const int &val)
{
for(;x<=m;x+=x&-x)
for(int _y=y;_y<=n;_y+=_y&-_y)
bit[x][_y]+=val;
}
int getsum(int x,int y)
{
int rep=0;
for(;x>0;x-=x&-x)
for(int _y=y;_y>0;_y-=_y&-_y)
rep+=bit[x][_y];
return rep;
}
int sum(const int &x,const int &y,const int &u,const int &v)
{
return (getsum(u,v)-getsum(u,y-1)-getsum(x-1,v)+getsum(x-1,y-1));
}
};
struct miniBIT2D{
int m,n;
vector< vector<int> > node;
vector< vector<int> > bit;
miniBIT2D(const int &M,const int &N): m(M), n(N), node(M+1), bit(M+1) {};
void fakeup(int x,int y)
{
for(;x<=m;x+=x&-x)
node[x].push_back(y);
}
void fakeget(int x,int y)
{
for(;x>0;x-=x&-x)
node[x].push_back(y);
}
void fake()
{
for(int i=1;i<=m;i++)
sort(node[i].begin(),node[i].end()),
bit[i].resize(node[i].size()+7);
}
void update(int x,int y,const int &val)
{
for(;x<=m;x+=x&-x)
for(int _y=lower_bound(node[x].begin(),node[x].end(),y)-node[x].begin()+1;_y<=node[x].size();_y+=_y&-_y)
bit[x][_y]+=val;
}
int getsum(int x,int y)
{
int rep=0;
for(;x>0;x-=x&-x)
for(int _y=upper_bound(node[x].begin(),node[x].end(),y)-node[x].begin();_y>0;_y-=_y&-_y)
rep+=bit[x][_y];
return rep;
}
int sum(const int &x,const int &y,const int &u,const int &v)
{
return (getsum(u,v)-getsum(u,y-1)-getsum(x-1,v)+getsum(x-1,y-1));
}
};
struct query{
int val;
int x,y,u,v;
};
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int m,n;
///bit:
cin>>m>>n;
BIT2D bit(m,n);
for(int i=1,v;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>v,bit.update(i,j,v);
int q,x,y,u,v;
cin>>q;
while(q-->0) cin>>x>>y>>u>>v,cout<<bit.sum(x,y,u,v)<<"\n";
cout<<"-------------\n";
///mini:
cin>>m>>n;
vector<query> up,get;
miniBIT2D bitt(m,n);
for(int i=1,v;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>v,bitt.fakeup(i,j),up.push_back({v,i,j,0,0});
cin>>q;
while(q-->0)
{
cin>>x>>y>>u>>v;
bitt.fakeget(x-1,y-1);
bitt.fakeget(x-1,v);
bitt.fakeget(u,y-1);
bitt.fakeget(u,v);
get.push_back({0,x,y,u,v});
}
bitt.fake();
for(const auto &que: up) bitt.update(que.x,que.y,que.val);
for(const auto &que: get) cout<<bitt.sum(que.x,que.y,que.u,que.v)<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdGFnICJzcG9qIgojZGVmaW5lIG1heG4gMTAwMwojZGVmaW5lIG1heGMgMjA3CiNkZWZpbmUgb28gMTAwMDAwMDAwNwojZGVmaW5lIG1pZCAoKGwrcik+PjEpCiNkZWZpbmUgbWVzZXQoYSx4KSBtZW1zZXQoYSx4LHNpemVvZihhKSkKI2RlZmluZSBsb29wKHgpIGZvcihpbnQgTG9PcEVyPXg7TG9PcEVyLS0+MDspCi8vLz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4KCnN0cnVjdCBCSVQyRHsKCiAgICBpbnQgbSxuOwogICAgdmVjdG9yPCB2ZWN0b3I8aW50PiA+IGJpdDsKCiAgICBCSVQyRChjb25zdCBpbnQgJk0sY29uc3QgaW50ICZOKTogbShNKSwgbihOKSwgYml0KE0rMSx2ZWN0b3I8aW50PihOKzEpKSB7fTsKCiAgICB2b2lkIHVwZGF0ZShpbnQgeCxpbnQgeSxjb25zdCBpbnQgJnZhbCkKICAgIHsKICAgICAgICBmb3IoO3g8PW07eCs9eCYteCkKICAgICAgICAgICAgZm9yKGludCBfeT15O195PD1uO195Kz1feSYtX3kpCiAgICAgICAgICAgICAgICBiaXRbeF1bX3ldKz12YWw7CiAgICB9CgogICAgaW50IGdldHN1bShpbnQgeCxpbnQgeSkKICAgIHsKICAgICAgICBpbnQgcmVwPTA7CgogICAgICAgIGZvcig7eD4wO3gtPXgmLXgpCiAgICAgICAgICAgIGZvcihpbnQgX3k9eTtfeT4wO195LT1feSYtX3kpCiAgICAgICAgICAgICAgICByZXArPWJpdFt4XVtfeV07CiAgICAgICAgcmV0dXJuIHJlcDsKICAgIH0KCiAgICBpbnQgc3VtKGNvbnN0IGludCAmeCxjb25zdCBpbnQgJnksY29uc3QgaW50ICZ1LGNvbnN0IGludCAmdikKICAgIHsKICAgICAgICByZXR1cm4gKGdldHN1bSh1LHYpLWdldHN1bSh1LHktMSktZ2V0c3VtKHgtMSx2KStnZXRzdW0oeC0xLHktMSkpOwogICAgfQp9OwoKc3RydWN0IG1pbmlCSVQyRHsKCiAgICBpbnQgbSxuOwogICAgdmVjdG9yPCB2ZWN0b3I8aW50PiA+IG5vZGU7CiAgICB2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4gYml0OwoKICAgIG1pbmlCSVQyRChjb25zdCBpbnQgJk0sY29uc3QgaW50ICZOKTogbShNKSwgbihOKSwgbm9kZShNKzEpLCBiaXQoTSsxKSB7fTsKCiAgICB2b2lkIGZha2V1cChpbnQgeCxpbnQgeSkKICAgIHsKICAgICAgICBmb3IoO3g8PW07eCs9eCYteCkKICAgICAgICAgICAgICAgIG5vZGVbeF0ucHVzaF9iYWNrKHkpOwogICAgfQoKICAgIHZvaWQgZmFrZWdldChpbnQgeCxpbnQgeSkKICAgIHsKICAgICAgICBmb3IoO3g+MDt4LT14Ji14KQogICAgICAgICAgICBub2RlW3hdLnB1c2hfYmFjayh5KTsKICAgIH0KCiAgICB2b2lkIGZha2UoKQogICAgewogICAgICAgIGZvcihpbnQgaT0xO2k8PW07aSsrKQogICAgICAgICAgICBzb3J0KG5vZGVbaV0uYmVnaW4oKSxub2RlW2ldLmVuZCgpKSwKICAgICAgICAgICAgYml0W2ldLnJlc2l6ZShub2RlW2ldLnNpemUoKSs3KTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZShpbnQgeCxpbnQgeSxjb25zdCBpbnQgJnZhbCkKICAgIHsKICAgICAgICBmb3IoO3g8PW07eCs9eCYteCkKICAgICAgICAgICAgZm9yKGludCBfeT1sb3dlcl9ib3VuZChub2RlW3hdLmJlZ2luKCksbm9kZVt4XS5lbmQoKSx5KS1ub2RlW3hdLmJlZ2luKCkrMTtfeTw9bm9kZVt4XS5zaXplKCk7X3krPV95Ji1feSkKICAgICAgICAgICAgICAgIGJpdFt4XVtfeV0rPXZhbDsKICAgIH0KCiAgICBpbnQgZ2V0c3VtKGludCB4LGludCB5KQogICAgewogICAgICAgIGludCByZXA9MDsKCiAgICAgICAgZm9yKDt4PjA7eC09eCYteCkKICAgICAgICAgICAgZm9yKGludCBfeT11cHBlcl9ib3VuZChub2RlW3hdLmJlZ2luKCksbm9kZVt4XS5lbmQoKSx5KS1ub2RlW3hdLmJlZ2luKCk7X3k+MDtfeS09X3kmLV95KQogICAgICAgICAgICAgICAgcmVwKz1iaXRbeF1bX3ldOwogICAgICAgIHJldHVybiByZXA7CiAgICB9CgogICAgaW50IHN1bShjb25zdCBpbnQgJngsY29uc3QgaW50ICZ5LGNvbnN0IGludCAmdSxjb25zdCBpbnQgJnYpCiAgICB7CiAgICAgICAgcmV0dXJuIChnZXRzdW0odSx2KS1nZXRzdW0odSx5LTEpLWdldHN1bSh4LTEsdikrZ2V0c3VtKHgtMSx5LTEpKTsKICAgIH0KfTsKCnN0cnVjdCBxdWVyeXsKICAgIGludCB2YWw7CiAgICBpbnQgeCx5LHUsdjsKfTsKaW50IG1haW4oKQp7CiAgICAjaWZkZWYgZG1kZAogICAgZnJlb3Blbih0YWciLmlucCIsInIiLHN0ZGluKTsgZnJlb3Blbih0YWciLm91dCIsInciLHN0ZG91dCk7CiAgICAjZW5kaWYgLy8gZG1kZAogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwoKICAgIGludCBtLG47CgogICAgLy8vYml0OgogICAgY2luPj5tPj5uOwogICAgQklUMkQgYml0KG0sbik7CgogICAgZm9yKGludCBpPTEsdjtpPD1tO2krKykKICAgICAgICBmb3IoaW50IGo9MTtqPD1uO2orKykKICAgICAgICAgICAgY2luPj52LGJpdC51cGRhdGUoaSxqLHYpOwoKICAgIGludCBxLHgseSx1LHY7CiAgICBjaW4+PnE7CiAgICB3aGlsZShxLS0+MCkgY2luPj54Pj55Pj51Pj52LGNvdXQ8PGJpdC5zdW0oeCx5LHUsdik8PCJcbiI7CgogICAgY291dDw8Ii0tLS0tLS0tLS0tLS1cbiI7CiAgICAvLy9taW5pOgogICAgY2luPj5tPj5uOwogICAgdmVjdG9yPHF1ZXJ5PiB1cCxnZXQ7CiAgICBtaW5pQklUMkQgYml0dChtLG4pOwoKICAgIGZvcihpbnQgaT0xLHY7aTw9bTtpKyspCiAgICAgICAgZm9yKGludCBqPTE7ajw9bjtqKyspCiAgICAgICAgICAgIGNpbj4+dixiaXR0LmZha2V1cChpLGopLHVwLnB1c2hfYmFjayh7dixpLGosMCwwfSk7CgogICAgY2luPj5xOwogICAgd2hpbGUocS0tPjApCiAgICB7CiAgICAgICAgY2luPj54Pj55Pj51Pj52OwogICAgICAgIGJpdHQuZmFrZWdldCh4LTEseS0xKTsKICAgICAgICBiaXR0LmZha2VnZXQoeC0xLHYpOwogICAgICAgIGJpdHQuZmFrZWdldCh1LHktMSk7CiAgICAgICAgYml0dC5mYWtlZ2V0KHUsdik7CiAgICAgICAgZ2V0LnB1c2hfYmFjayh7MCx4LHksdSx2fSk7CgogICAgfQoKICAgIGJpdHQuZmFrZSgpOwoKICAgIGZvcihjb25zdCBhdXRvICZxdWU6IHVwKSBiaXR0LnVwZGF0ZShxdWUueCxxdWUueSxxdWUudmFsKTsKICAgIGZvcihjb25zdCBhdXRvICZxdWU6IGdldCkgY291dDw8Yml0dC5zdW0ocXVlLngscXVlLnkscXVlLnUscXVlLnYpPDwiXG4iOwoKICAgIHJldHVybiAwOwp9Cg==