#include <bits/stdc++.h>
using namespace std;
long long n, m, p;
char x;
bool ma[1000 + 5][1000 + 5];
long long sum[1000 + 5][1000 + 5];
long long jc[2][45];
long long dfs(long long x, long long y, int flag) {
  if (x == 0 || y == 0) return 0;
  if (x <= n && y <= m) {
    if (flag)
      return sum[x][y];
    else
      return x * y - sum[x][y];
  }
  long long xx, yy, xn = -1, yn = -1;
  xx = x;
  yy = y;
  if (xx >= n) {
    for (int i = 0; i <= 32; i++)
      if (jc[0][i] <= x && x < jc[0][i + 1]) {
        xx = jc[0][i];
        xn = i;
        break;
      }
  }
  if (yy >= m) {
    for (int i = 0; i <= 32; i++)
      if (jc[1][i] <= y && y < jc[1][i + 1]) {
        yy = jc[1][i];
        yn = i;
        break;
      }
  }
  long long ans = 0;
  if (xn >= 1 && yn >= 1) {
    ans += xx * yy / 2;
  } else {
    if (xx > n || yy > m)
      ans += xx * yy / 2;
    else {
      if (flag)
        ans += sum[xx][yy];
      else
        ans += xx * yy - sum[xx][yy];
    }
  }
  if (xx > n)
    ans += xx * (y - yy) / 2;
  else
    ans += dfs(xx, y - yy, !flag);
  if (yy > m)
    ans += yy * (x - xx) / 2;
  else
    ans += dfs(x - xx, yy, !flag);
  ans += dfs(x - xx, y - yy, flag);
  return ans;
}
int main() {
  scanf("%lld%lld%lld", &n, &m, &p);
  for (int i = 1; i <= n; i++) {
    getchar();
    for (int j = 1; j <= m; j++) {
      scanf("%c", &x);
      ma[i][j] = x - '0';
      sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + ma[i][j];
    }
  }
  jc[0][0] = n;
  jc[1][0] = m;
  for (int i = 1; i <= 35; i++) {
    jc[0][i] = jc[0][i - 1] << 1;
    jc[1][i] = jc[1][i - 1] << 1;
  }
  while (p--) {
    int x1, y1, x2, y2;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    long long ans = dfs(x2, y2, 1);
    ans -= dfs(x1 - 1, y2, 1);
    ans -= dfs(x2, y1 - 1, 1);
    ans += dfs(x1 - 1, y1 - 1, 1);
    printf("%lld\n", ans);
  }
  return 0;
}
