#include <iostream>
using namespace std;

// サイズの大きい配列はローカルではなくグローバルで宣言する
char field[1010][1010];
int J[1010][1010];
int O[1010][1010];
int I[1010][1010];

int main() {
  // 入力
  int M, N, K;
  cin >> M >> N >> K;
  for (int y = 1; y <= M; y++) {
    for (int x = 1; x <= N; x++) {
      cin >> field[y][x];
    }
  }

  // ジャングル、海、氷ごとに累積和をとり、与えられる区間に含まれる数の計算の高速化をする
  // 累積和をとるための前処理
  for (int y = 1; y <= M; y++) {
    for (int x = 1; x <= N; x++) {
      if (field[y][x] == 'J') J[y][x] = 1;
      else if (field[y][x] == 'O') O[y][x] = 1;
      else I[y][x] = 1;
    }
  }
  // 横方向の累積和をとる
  for (int y = 1; y <= M; y++) {
    for (int x = 2; x <= N; x++) {
      J[y][x] += J[y][x-1];
      O[y][x] += O[y][x-1];
      I[y][x] += I[y][x-1];
    }
  }
  // 縦方向の累積和をとる
  for (int x = 1; x <= N; x++) {
    for (int y = 2; y <= M; y++) {
      J[y][x] += J[y-1][x];
      O[y][x] += O[y-1][x];
      I[y][x] += I[y-1][x];
    }
  }

  // 区間の入力を受け取りつつ、累積和を利用して定数時間で解答する
  int a, b, c, d;
  for (int i = 0; i < K; i++) {
    cin >> a >> b >> c >> d;
    cout << J[c][d] - J[a-1][d] - J[c][b-1] + J[a-1][b-1] << " ";
    cout << O[c][d] - O[a-1][d] - O[c][b-1] + O[a-1][b-1] << " ";
    cout << I[c][d] - I[a-1][d] - I[c][b-1] + I[a-1][b-1] << endl;
  }
  return 0;
}

