#include<cstdio>
typedef struct{
  int j;
  int o;
  int i;
} P;
char maze[1024][1024];
P x[1024][1024];
P solve(int x1, int y1, int x2, int y2){
  P p;
  p.j = x[x2][y2].j - x[x1 - 1][y2].j - x[x2][y1 - 1].j + x[x1 - 1][y1 - 1].j;
  p.o = x[x2][y2].o - x[x1 - 1][y2].o - x[x2][y1 - 1].o + x[x1 - 1][y1 - 1].o;
  p.i = x[x2][y2].i - x[x1 - 1][y2].i - x[x2][y1 - 1].i + x[x1 - 1][y1 - 1].i;
  return p;
}
int main(void){
  int m, n, k;
  int a, b, c, d;
  P p;

  scanf("%d %d %d", &m, &n, &k);
  for(int i = 0;i < m; i++) scanf("%s", maze[i]);

  for(int i = 0;i < m; i++){
    for(int j = 0;j < n; j++){
      p = solve(1, 1, i + 1, j);
      x[i + 1][j + 1].j = p.j; x[i + 1][j + 1].o = p.o; x[i + 1][j + 1].i = p.i;      p = solve(1, 1, i, j + 1);
      x[i + 1][j + 1].j += p.j; x[i + 1][j + 1].o += p.o; x[i + 1][j + 1].i += p.i;
      p = solve(1, 1, i, j);
      x[i + 1][j + 1].j -= p.j; x[i + 1][j + 1].o -= p.o; x[i + 1][j + 1].i -= p.i;
      if(maze[i][j] == 'J') x[i + 1][j + 1].j++;
      if(maze[i][j] == 'O') x[i + 1][j + 1].o++;
      if(maze[i][j] == 'I') x[i + 1][j + 1].i++;
    }
  }

  for(int i = 0;i < k; i++){
    scanf("%d %d %d %d", &a, &b, &c, &d);
    p = solve(a, b, c, d);
    printf("%d %d %d\n", p.j, p.o, p.i);
  }
}
