#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 502;
int n, m, q;
int r[502][502], b[502][502], y[502][502], g[502][502];
char c[502][502];
int val[502][502];
int f[502][11][502][11];
void init() {
  memset(f, 0, sizeof(f));
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) f[i][0][j][0] = val[i][j];
  for (int k = 1; k <= 10; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) {
        int a = i + (1 << k - 1), b = j + (1 << k - 1);
        f[i][k][j][0] =
            max(f[i][k - 1][j][0], a >= maxn ? 0 : f[a][k - 1][j][0]);
        f[i][0][j][k] =
            max(f[i][0][j][k - 1], b >= maxn ? 0 : f[i][0][b][k - 1]);
      }
  for (int i = 1; i <= 10; i++)
    for (int j = 1; j <= 10; j++)
      for (int k = 1; k <= n; k++)
        for (int l = 1; l <= m; l++) {
          int a = k + (1 << i - 1), b = l + (1 << j - 1);
          if (a >= maxn || b >= maxn) continue;
          f[k][i][l][j] = max(max(f[k][i - 1][l][j], f[k][i][l][j - 1]),
                              f[a][i - 1][b][j - 1]);
        }
  return;
}
int query(int a, int b, int c, int d) {
  if (a > b || c > d) return 0;
  int k1 = 0, k2 = 0;
  while (a + (1 << k1) - 1 < b - (1 << k1)) k1++;
  while (c + (1 << k2) - 1 < d - (1 << k2)) k2++;
  int A = b - (1 << k1) + 1, C = d - (1 << k2) + 1;
  return max(max(f[a][k1][c][k2], f[A][k1][C][k2]),
             max(f[a][k1][C][k2], f[A][k1][c][k2]));
}
int main() {
  ios::sync_with_stdio(false);
  scanf("%d%d%d", &n, &m, &q);
  getchar();
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      c[i][j] = getchar();
    }
    getchar();
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (c[i][j] != 'R') {
        r[i][j] = 0;
        continue;
      }
      r[i][j] = min(r[i - 1][j - 1], min(r[i - 1][j], r[i][j - 1])) + 1;
    }
  for (int i = 1; i <= n; i++)
    for (int j = m; j >= 1; j--) {
      if (c[i][j] != 'G') {
        g[i][j] = 0;
        continue;
      }
      g[i][j] = min(g[i - 1][j + 1], min(g[i - 1][j], g[i][j + 1])) + 1;
    }
  for (int i = n; i >= 1; i--)
    for (int j = 1; j <= m; j++) {
      if (c[i][j] != 'Y') {
        y[i][j] = 0;
        continue;
      }
      y[i][j] = min(y[i + 1][j - 1], min(y[i + 1][j], y[i][j - 1])) + 1;
    }
  for (int i = n; i >= 1; i--)
    for (int j = m; j >= 1; j--) {
      if (c[i][j] != 'B') {
        b[i][j] = 0;
        continue;
      }
      b[i][j] = min(b[i + 1][j + 1], min(b[i + 1][j], b[i][j + 1])) + 1;
    }
  n--;
  m--;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      val[i][j] =
          min(min(r[i][j], g[i][j + 1]), min(y[i + 1][j], b[i + 1][j + 1]));
  init();
  for (int i = 1; i <= q; i++) {
    int r1, c1, r2, c2;
    scanf("%d%d%d%d", &r1, &c1, &r2, &c2);
    r2--;
    c2--;
    int l = 0, r = 250;
    while (l != r) {
      int m = (l + r) >> 1;
      m++;
      int t = m - 1;
      if (query(r1 + t, r2 - t, c1 + t, c2 - t) >= m)
        l = m;
      else
        r = m - 1;
    }
    printf("%d\n", l * l * 4);
  }
}
