#include <bits/stdc++.h>
#pragma GCC optimize("no-stack-protector")
#pragma GCC target("avx2")
#pragma GCC optimize("Ofast")
using namespace std;
const int maxn = 1e5 + 1;
char v[502][502];
int p[252][502][502], rt[502][502], yt[502][502], bt[502][502], gt[502][502];
bitset<502> hc[502][502];
inline int get(int k, int r1, int c1, int r2, int c2) {
  if (r2 < r1 || c2 < c1) return 0;
  --r1;
  --c1;
  return p[k][r2][c2] + p[k][r1][c1] - p[k][r1][c2] - p[k][r2][c1];
}
signed main() {
  srand(time(0));
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m, q;
  char fuck[4] = {'R', 'G', 'Y', 'B'};
  cin >> n >> m >> q;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> v[i][j];
    }
  for (int i = 0; i < n; i++) {
    for (int j = m - 2; j >= 0; j--) {
      if (v[i][j] == 'R' && v[i][j + 1] == 'G') {
        rt[i][j] = 2;
        continue;
      }
      if (v[i][j] != 'R' || v[i][j + 1] != 'R' || j + rt[i][j + 1] == m)
        continue;
      rt[i][j] = (v[i][j + rt[i][j + 1]] == 'G' ? rt[i][j + 1] + 2 : 0);
    }
  }
  for (int i = n - 2; i >= 0; i--) {
    for (int j = 0; j < m; j++) {
      if (v[i][j] == 'R' && v[i + 1][j] == 'Y') {
        yt[i][j] = 2;
        continue;
      }
      if (v[i][j] != 'R' || v[i + 1][j] != 'R' || i + yt[i + 1][j] == n)
        continue;
      yt[i][j] = (v[i + yt[i + 1][j]][j] == 'Y' ? yt[i + 1][j] + 2 : 0);
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = m - 2; j >= 0; j--) {
      if (v[i][j] == 'Y' && v[i][j + 1] == 'B') {
        bt[i][j] = 2;
        continue;
      }
      if (v[i][j] != 'Y' || v[i][j + 1] != 'Y' || j + bt[i][j + 1] == m)
        continue;
      bt[i][j] = (v[i][j + bt[i][j + 1]] == 'B' ? bt[i][j + 1] + 2 : 0);
    }
  }
  for (int i = n - 2; i >= 0; i--) {
    for (int j = 0; j < m; j++) {
      if (v[i][j] == 'G' && v[i + 1][j] == 'B') {
        gt[i][j] = 2;
        continue;
      }
      if (v[i][j] != 'G' || v[i + 1][j] != 'G' || i + gt[i + 1][j] == n)
        continue;
      gt[i][j] = (v[i + gt[i + 1][j]][j] == 'B' ? gt[i + 1][j] + 2 : 0);
    }
  }
  for (int k = 1; k <= min(n, m) / 2; k++) {
    for (int i = 0; i <= n - 2 * k; i++) {
      for (int j = 0; j <= m - 2 * k; j++) {
        if (rt[i][j] == 2 * k && yt[i][j] == 2 * k &&
            gt[i][j + 2 * k - 1] == 2 * k && bt[i + 2 * k - 1][j] == 2 * k &&
            (k == 1 || hc[k - 1][i + 1][j + 1]))
          hc[k][i][j] = 1;
      }
    }
  }
  for (int k = 1; k <= min(n, m) / 2; k++) {
    for (int i = 0; i <= n; i++)
      for (int j = 0; j <= m; j++)
        p[k][i + 1][j + 1] =
            p[k][i][j + 1] + p[k][i + 1][j] - p[k][i][j] + (hc[k][i][j]);
  }
  for (int i = 0; i < q; i++) {
    int r1, c1, r2, c2;
    cin >> r1 >> c1 >> r2 >> c2;
    int cx = 0;
    int first = 0, second = min(r2 - r1 + 1, c2 - c1 + 1) / 2 + 1;
    while (second - first > 1) {
      int md = (first + second) / 2;
      if (get(md, r1, c1, r2 - 2 * md + 1, c2 - 2 * md + 1))
        first = md;
      else
        second = md;
    }
    cout << first * first * 4 << '\n';
  }
  return 0;
}
