/*
ЗАПУСКАЕМ ВЫСОКОГО
░ГУСЯ░▄▀▀▀▄░РАБОТЯГИ░░
▄███▀░◐░░░▌░░░░░░░
░░░░▌░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░▄▀▒▒▀▀▀▀▄
░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄
░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░▄▄▌▌▄▌▌░░░░░ 
 */
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <stack>
#include <deque>
   
    
    
using namespace std;
template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; }
template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; }  
#define sz(c) (int)(c).size()
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define left left228
#define right right228
#define next next228
#define rank rank228
const int MAXN = 2001;


int n, m, q;
string s[MAXN];
int d[MAXN][MAXN];
int d1[MAXN][MAXN];
int d2[MAXN][MAXN];


int getsum(int i, int j, int i1, int j1) {
    return d[i1][j1] - (i ? d[i - 1][j1]: 0) - (j ? d[i1][j - 1]: 0) + (i && j ? d[i - 1][j - 1]: 0);
}


int getsum1(int i, int j, int i1, int j1) {
    return d1[i1][j1] - (i ? d1[i - 1][j1]: 0) - (j ? d1[i1][j - 1]: 0) + (i && j ? d1[i - 1][j - 1]: 0);
}


int getsum2(int i, int j, int i1, int j1) {
    return d2[i1][j1] - (i ? d2[i - 1][j1]: 0) - (j ? d2[i1][j - 1]: 0) + (i && j ? d2[i - 1][j - 1]: 0);
}


int main() {    
    ios_base::sync_with_stdio(false);
    cin >> n >> m >> q;
    for (int i = 0; i < n; i++) {
        cin >> s[i];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (s[i][j] == '1') {
                d[i][j] = 1;
            }
            d[i][j] += (i ? d[i - 1][j]: 0) + (j ? d[i][j - 1]: 0) - (i && j ? d[i - 1][j - 1]: 0);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (j != m - 1 && s[i][j] == '1' && s[i][j + 1] == '1') {
                d1[i][j] = 1;
            }
            d1[i][j] += (i ? d1[i - 1][j]: 0) + (j ? d1[i][j - 1]: 0) - (i && j ? d1[i - 1][j - 1]: 0);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i != n - 1 && s[i][j] == '1' && s[i + 1][j] == '1') {
                d2[i][j] = 1;
            }
            d2[i][j] += (i ? d2[i - 1][j]: 0) + (j ? d2[i][j - 1]: 0) - (i && j ? d2[i - 1][j - 1]: 0);
        }
    }
    for (int it = 0; it < q; it++) {
        int i, j, i1, j1;
        cin >> i >> j >> i1 >> j1;
        i--, j--, i1--, j1--;
        int cnt = getsum(i, j, i1, j1);
        int cnt1 = (j1 > j ? getsum1(i, j, i1, j1 - 1): 0);
        cnt1 += (i1 > i ? getsum2(i, j, i1 - 1, j1): 0);
        cout << cnt - cnt1 << '\n';
    }   
    return 0;
}


Measured memory_bytes: 52992