// AOL Q.0560
// YAMADA Terushige 2013.1.20.

#include<iostream>
#include<vector>

using namespace std;

//int J[1001][1001],O[1001][1001],I[1001][1001];
//大きい２次元配列はグローバル変数か，ローカルならstaticで静的に確保するか ，
//あるいはvector を使う。いずれも値は0で初期化されている。

int main(){

  int M,N,K;
  cin >> M >> N;
  cin >> K;
  M++;N++;K++;

  static int J[1001][1001],O[1001][1001],I[1001][1001];

  /*
  vector<vector<int> > J(M,vector<int>(N));
  vector<vector<int> > O(M,vector<int>(N));
  vector<vector<int> > I(M,vector<int>(N));
  */

  for(int i=1;i<M;i++){
    for(int j=1;j<N;j++){
      J[i][j]=J[i-1][j]+J[i][j-1]-J[i-1][j-1];
      O[i][j]=O[i-1][j]+O[i][j-1]-O[i-1][j-1];
      I[i][j]=I[i-1][j]+I[i][j-1]-I[i-1][j-1];
      char c;
      cin>>c;
      switch (c){
      case 'J':
	J[i][j]++;break;
      case 'O':
	O[i][j]++;break;
      default:
	I[i][j]++;break;
      }
    }
  }
  
  for(int k=1;k<K;k++){
    int a,b,c,d;
    int nj,no,ni;
    cin >> a >> b >> c >> d;
    a--;b--;
    nj=J[c][d]+J[a][b]-J[a][d]-J[c][b];
    no=O[c][d]+O[a][b]-O[a][d]-O[c][b];
    ni=I[c][d]+I[a][b]-I[a][d]-I[c][b];
    cout << nj << ' ' << no << ' ' << ni << endl;
  }
  return 0;
}
