#include<bits/stdc++.h>
 
using namespace std;

template<typename T> class BIT {
private:
    int n,m; vector<vector<T> > bit;
public:
    void add(int i, int j, T val){
        for(int i_ = i+1; i_ < n; i_ += i_ & -i_)
            for(int j_ = j+1; j_ < m; j_ += j_ & -j_)
                bit[i_][j_] += val;
    }
    T sum(int i, int j){
        T s = 0;
            for(int i_ = i+1; i_ > 0; i_ -= i_ & -i_)
                for(int j_ = j+1; j_ > 0; j_ -= j_ & -j_)
                    s += bit[i_][j_];
            return s;
    }
    T sum(int lx, int uy, int rx, int dy){
        return sum(rx, dy) - sum(lx-1, dy) - sum(rx, uy-1) + sum(lx-1, uy-1);   
    }
    BIT(int sz1, int sz2){
        n = sz1 + 1, m = sz2 + 1;
        bit.resize(n, vector<T>(m, 0));
    }
    BIT(vector<vector<T> >& v){
        n = (int)v.size()+1, m = (int)v[0].size()+1;
        bit.resize(n, vector<T>(m, 0));
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                add(i, j, v[i][j]);
    }
    void print_sum(){
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                cout<< sum(i-1, j-1) << " ";
        cout << "\n";
    }
};

template<typename T> class BIT_2D_RangeAdd_RangeSum {
private:
    int n,m;
    void add(BIT<T>& bit,int lx, int ly, int rx, int ry, T val){
        bit.add(lx, ly, val), bit.add(lx, ry-1, -val);
        bit.add(rx-1, ly, -val), bit.add(rx-1, ry-1, val);
    }
public:
    BIT<T> bitxy, bitx, bity, biti;
    BIT_2D_RangeAdd_RangeSum(int sz1, int sz2) : n(sz1+1), m(sz2+1),
            bitxy(n,m), bitx(n,m), bity(n,m), biti(n,m){}
    // [lx, rx)×[ly, ry) に val を足す
    void add(int lx, int ly, int rx, int ry, T val){
        add(bitxy, lx, ly, rx, ry, val);
        add(bitx, lx, ly, rx, ry, -val*(ly-1));
        add(bitx, lx, ry, rx, m+1, val*(ry-ly));
        add(bity, lx, ly, rx, ry, -val*(lx-1));
        add(bity, rx, ly, n+1, ry, val*(rx-lx));
        add(biti, lx, ly, rx, ry, val);
        add(biti, rx, ly, n+1, ry, -val*(ly-1)*(rx-lx));
        add(biti, lx, ry, rx, m+1, -val*(lx-1)*(ry-ly));
        add(biti, rx, ry, n+1, m+1, val*(rx-lx)*(ry-ly));
    }
    T sum(int x, int y){
        return bitxy.sum(x, y)*x*y + bitx.sum(x, y)*x + bity.sum(x, y)*y + biti.sum(x, y);
    }
    // [lx, rx)×[ly, ry) の和を求める
    T sum(int lx, int ly, int rx, int ry){
        return sum(rx, ry) - sum(lx, ry) - sum(rx, ly) + sum(lx, ly);
    }
    void print(){
        for(int i = 0; i < n-1; i++){
            for(int j = 0; j < m-1; j++){
                cout<<sum(i,j,i+1,j+1)<<" ";
            }
            cout<<endl;
        }
    }
};
 
int main()
{
    int m, n, K;
    cin >> m >> n >> K;
    vector<BIT_2D_RangeAdd_RangeSum<int> > bt(3, BIT_2D_RangeAdd_RangeSum<int>(m, n));
    vector<string> s(m);
    for(int i = 0; i < m; i++){
        cin >> s[i];
        for(int j = 0; j < n; j++){
            if(s[i][j] == 'J'){
                bt[0].add(i, j, i+1, j+1, 1);
            }else if(s[i][j] == 'O'){
                bt[1].add(i, j, i+1, j+1, 1);
            }else{
                bt[2].add(i, j, i+1, j+1, 1);
            }
        }
    }
    for(int i = 0; i < K; i++){
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        --a, --b;
        cout << bt[0].sum(a, b, c, d) << " " << bt[1].sum(a, b, c, d) << " " << bt[2].sum(a, b, c, d) << "\n";
    }
    return 0;
}


Measured memory_bytes: 65368