#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define mp make_pair
#define A first
#define B second
#define MIN (1<<31)
#define MAX (1<<31) - 1
#define MOD 1000000007
using namespace std;
#define N 1005
ll A[N][N]; //matrix
ll dp[N][N];
int n,m;
ll calc(int x,int y){ //recursive calculates the sum of the sub-rectangle {(1,1) to (x,y)}
if(x<1 || y<1 || x>n || y>m) return 0;
if(dp[x][y]!=-1) return dp[x][y];
dp[x][y] = calc(x-1,y) + calc(x,y-1);
dp[x][y] -= calc(x-1,y-1);
dp[x][y] += A[x][y];
return dp[x][y];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
memset(dp,-1,sizeof(dp));
cin>>n>>m; //input the dimensions
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cin>>A[i][j]; //take input
}
dp[1][1]=A[1][1]; //base case
int c,x1,y1,x2,y2;
ll ans=0;
cin>>c; //no of queries
for(int i=0;i<c;i++){
cin>>x1>>y1>>x2>>y2; //input of coordinates
ans = calc(x2,y2); //the formula for calculating the sum of sub-rectangle
ans -= (calc(x1-1,y2) + calc(x2,y1-1)); //...
ans += calc(x1-1,y1-1); //...
cout<<ans<<endl; //output of the answer
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgQSBmaXJzdAojZGVmaW5lIEIgc2Vjb25kCiNkZWZpbmUgTUlOICgxPDwzMSkKI2RlZmluZSBNQVggKDE8PDMxKSAtIDEKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBOIDEwMDUKCmxsIEFbTl1bTl07CS8vbWF0cml4CmxsIGRwW05dW05dOwoKaW50IG4sbTsKCmxsIGNhbGMoaW50IHgsaW50IHkpewkvL3JlY3Vyc2l2ZSBjYWxjdWxhdGVzIHRoZSBzdW0gb2YgdGhlIHN1Yi1yZWN0YW5nbGUgeygxLDEpIHRvICh4LHkpfQoJaWYoeDwxIHx8IHk8MSB8fCB4Pm4gfHwgeT5tKQlyZXR1cm4gMDsKCWlmKGRwW3hdW3ldIT0tMSkJcmV0dXJuIGRwW3hdW3ldOwoJZHBbeF1beV0gPSBjYWxjKHgtMSx5KSArIGNhbGMoeCx5LTEpOwoJZHBbeF1beV0gLT0gY2FsYyh4LTEseS0xKTsKCWRwW3hdW3ldICs9IEFbeF1beV07CglyZXR1cm4gZHBbeF1beV07Cn0KCmludCBtYWluKCl7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbi50aWUoTlVMTCk7CgoJbWVtc2V0KGRwLC0xLHNpemVvZihkcCkpOwoJY2luPj5uPj5tOwkvL2lucHV0IHRoZSBkaW1lbnNpb25zCglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJZm9yKGludCBqPTE7ajw9bTtqKyspCWNpbj4+QVtpXVtqXTsJLy90YWtlIGlucHV0Cgl9CglkcFsxXVsxXT1BWzFdWzFdOwkvL2Jhc2UgY2FzZQoJaW50IGMseDEseTEseDIseTI7CglsbCBhbnM9MDsKCWNpbj4+YzsJLy9ubyBvZiBxdWVyaWVzCglmb3IoaW50IGk9MDtpPGM7aSsrKXsKCQljaW4+PngxPj55MT4+eDI+PnkyOwkvL2lucHV0IG9mIGNvb3JkaW5hdGVzCgkJYW5zID0gY2FsYyh4Mix5Mik7CS8vdGhlIGZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoZSBzdW0gb2Ygc3ViLXJlY3RhbmdsZQoJCWFucyAtPSAoY2FsYyh4MS0xLHkyKSArIGNhbGMoeDIseTEtMSkpOwkvLy4uLgoJCWFucyArPSBjYWxjKHgxLTEseTEtMSk7CS8vLi4uCgkJY291dDw8YW5zPDxlbmRsOwkvL291dHB1dCBvZiB0aGUgYW5zd2VyCgl9CglyZXR1cm4gMDsKfQoKCg==