#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
int best[505][505][9][9];
int dp[4][505][505];
string grid[505];
int powers[9];
int n, m;
void solve(int idx, char ch) {
  if (grid[n - 1][m - 1] == ch) dp[idx][n - 1][m - 1] = 1;
  for (int j = m - 2; j >= 0; j--) {
    if (grid[n - 1][j] == ch) dp[idx][n - 1][j] = 1;
  }
  for (int i = n - 2; i >= 0; i--) {
    if (grid[i][m - 1] == ch) dp[idx][i][m - 1] = 1;
    for (int j = m - 2; j >= 0; j--) {
      if (grid[i][j] != ch) continue;
      int k = min(dp[idx][i][j + 1], dp[idx][i + 1][j]);
      if (grid[i + k][j + k] == ch) ++k;
      dp[idx][i][j] = k;
    }
  }
}
bool check(int i, int j, int k) {
  if (k == 0) return 1;
  if (i < k - 1 || i + k >= n || j < k - 1 || j + k >= m) return 0;
  if (dp[0][i - (k - 1)][j - (k - 1)] >= k && dp[1][i - (k - 1)][j + 1] >= k &&
      dp[2][i + 1][j - (k - 1)] >= k && dp[3][i + 1][j + 1] >= k)
    return 1;
  return 0;
}
bool check2(int i1, int j1, int i2, int j2, int val) {
  if (i1 > i2 || j1 > j2) return 0;
  int k1 = 0, k2 = 0;
  while (i1 + (1 << k1) <= i2 + 1) ++k1;
  --k1;
  while (j1 + (1 << k2) <= j2 + 1) ++k2;
  --k2;
  i2 -= (powers[k1] - 1);
  j2 -= (powers[k2] - 1);
  return max(max(best[i1][j1][k1][k2], best[i2][j1][k1][k2]),
             max(best[i1][j2][k1][k2], best[i2][j2][k1][k2])) >= val;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int q;
  cin >> n >> m >> q;
  for (int i = 0; i < n; i++) cin >> grid[i];
  memset(dp, 0, sizeof(dp));
  memset(best, 0, sizeof(best));
  char colors[] = {'R', 'G', 'Y', 'B'};
  for (int i = 0; i < 4; i++) solve(i, colors[i]);
  int lim = min(n, m);
  int val[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      int lo = 0;
      int hi = lim;
      while (lo < hi) {
        int mid = (lo + hi + 1) / 2;
        if (check(i, j, mid))
          lo = mid;
        else
          hi = mid - 1;
      }
      val[i][j] = lo;
    }
  }
  powers[0] = 1;
  for (int i = 1; i < 9; i++) powers[i] = powers[i - 1] << 1;
  for (int i = n - 1; i >= 0; i--) {
    for (int j = m - 1; j >= 0; j--) {
      best[i][j][0][0] = val[i][j];
      for (int k1 = 0; k1 < 9; k1++) {
        if (i + powers[k1] > n) continue;
        for (int k2 = 0; k2 < 9; k2++) {
          if (j + powers[k2] > m || k1 + k2 == 0) continue;
          if (k1 == 0)
            best[i][j][k1][k2] = max(best[i][j][k1][k2 - 1],
                                     best[i][j + powers[k2 - 1]][k1][k2 - 1]);
          else
            best[i][j][k1][k2] = max(best[i][j][k1 - 1][k2],
                                     best[i + powers[k1 - 1]][j][k1 - 1][k2]);
        }
      }
    }
  }
  while (q--) {
    int r1, c1, r2, c2;
    cin >> r1 >> c1 >> r2 >> c2;
    --r1;
    --r2;
    --c1;
    --c2;
    int lo = 0;
    int hi = lim;
    while (lo < hi) {
      int k = (lo + hi + 1) / 2;
      int i1 = r1 + k - 1, j1 = c1 + k - 1;
      int i2 = r2 - k, j2 = c2 - k;
      if (check2(i1, j1, i2, j2, k))
        lo = k;
      else
        hi = k - 1;
    }
    cout << 4 * lo * lo << endl;
  }
}
