#include <bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
const int INF=1e9;
//const int MOD=998244353;
const long long LINF=1e18;
#define int long long
//template
int black[2005][2005],ver[2005][2005],wid[2005][2005];
//main
signed main(){
  int N,M,Q;cin>>N>>M>>Q;
  std::vector<string> s(N+1);
  for(int i=0;i<N;i++)cin>>s[i];
  s[N]=(string(M,'#'));
  for(int i=0;i<=N;i++)s[i]+="#";
  for(int i=0;i<N;i++){
    for(int j=0;j<M;j++){
      if(s[i][j]=='1')black[i+1][j+1]++;
      if(s[i][j]=='1'&&s[i][j+1]=='1')ver[i+1][j+1]++;
      if(s[i][j]=='1'&&s[i+1][j]=='1')wid[i+1][j+1]++;
    }
  }
  for(int i=0;i<=N;i++){
    for(int j=0;j<=M;j++){
      black[i][j+1]+=black[i][j];
      ver[i][j+1]+=ver[i][j];
      wid[i][j+1]+=wid[i][j];
    }
  }
  for(int i=0;i<=N;i++){
    for(int j=0;j<=M;j++){
      black[i+1][j]+=black[i][j];
      ver[i+1][j]+=ver[i][j];
      wid[i+1][j]+=wid[i][j];
    }
  }
  std::vector<int> ans(Q);
  for(int i=0;i<Q;i++){
    int x1,x2,y1,y2;cin>>x1>>y1>>x2>>y2;
    int B=black[x2][y2]+black[x1-1][y1-1]-black[x2][y1-1]-black[x1-1][y2];
    int E1=ver[x2][y2-1]+ver[x1-1][y1-1]-ver[x2][y1-1]-ver[x1-1][y2-1];
    int E2=wid[x2-1][y2]+wid[x1-1][y1-1]-wid[x2-1][y1-1]-wid[x1-1][y2];
    ans[i]=B-E1-E2;
  }
  for(int i=0;i<Q;i++)cout<<ans[i]<<endl;
}
/*
解説AC
連結成分の個数は森なら頂点の個数と辺の数から数えられるというもの
森じゃなくても各連結成分の頂点の数と辺の数に何かしら関係があれば使えるテクだね
数えやすい成分に言い換えてしまうテクニック
あとそもそも今回の問題の設定を閉路がないとしか思わなかったけど閉路がない＝木（森）を忘れていた
*/

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	x=0;char c=getchar();bool f=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return  x;
}
template<class t> inline void write(t x){
	if(x<0){putchar('-'),write(-x);}
	else{if(x>9)write(x/10);putchar('0'+x%10);}
}

const int N=2005;
int n,m,q,a[N][N],s[N][N],sx[N][N],sy[N][N];

void doit(){
	int x,y,xx,yy;
	read(x);read(y);read(xx);read(yy);
	int n=s[xx][yy]-s[xx][y-1]-s[x-1][yy]+s[x-1][y-1];
	int m=(sx[xx][yy-1]-sx[xx][y-1]-sx[x-1][yy-1]+sx[x-1][y-1])+(sy[xx-1][yy]-sy[x-1][yy]-sy[xx-1][y-1]+sy[x-1][y-1]);
	write(n-m);puts("");
}

signed main(){
	read(n);read(m);read(q);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) scanf("%1d",&a[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
			sx[i][j]=sx[i-1][j]+sx[i][j-1]-sx[i-1][j-1]+(a[i][j]+a[i][j+1]==2);
			sy[i][j]=sy[i-1][j]+sy[i][j-1]-sy[i-1][j-1]+(a[i][j]+a[i+1][j]==2);
		}
	while(q--) doit();
}