#include <bits/stdc++.h>
using namespace std;
;
clock_t start;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());
const long long N = 501, lmx = 11;
long long mx[N][N][lmx][lmx], n, m, q, col[4][N][N], logg[N];
long long sum(long long k, long long r1, long long c1, long long r2,
              long long c2) {
  return col[k][r2][c2] - col[k][r2][c1] - col[k][r1][c2] + col[k][r1][c1];
}
void sparse() {
  for (long long i = 2; i < N; i++) logg[i] = logg[i / 2] + 1;
  for (long long lgi = 1; lgi < lmx; lgi++) {
    for (long long i = 1; i <= n; i++) {
      for (long long j = 1; j <= m; j++) {
        if (i + (1 << (lgi - 1)) <= n)
          mx[i][j][lgi][0] = max(mx[i][j][lgi - 1][0],
                                 mx[i + (1 << (lgi - 1))][j][lgi - 1][0]);
      }
    }
  }
  for (long long lgi = 0; lgi < lmx; lgi++) {
    for (long long lgj = 1; lgj < lmx; lgj++) {
      for (long long i = 1; i <= n; i++) {
        for (long long j = 1; j <= m; j++) {
          long long k = lgj - 1;
          if (j + (1 << k) <= m)
            mx[i][j][lgi][lgj] =
                max(mx[i][j][lgi][k], mx[i][j + (1 << k)][lgi][k]);
        }
      }
    }
  }
}
long long query(long long r1, long long c1, long long r2, long long c2) {
  if (r1 > r2 || c1 > c2) return 0;
  long long k1 = logg[r2 - r1 + 1], k2 = logg[c2 - c1 + 1];
  long long m1 = max(mx[r1][c1][k1][k2], mx[r2 - (1 << k1) + 1][c1][k1][k2]);
  long long m2 = max(mx[r1][c2 - (1 << k2) + 1][k1][k2],
                     mx[r2 - (1 << k1) + 1][c2 - (1 << k2) + 1][k1][k2]);
  return max(m1, m2);
}
void solve() {
  string s, ss = "RGYB";
  cin >> n >> m >> q;
  for (long long i = 0; i < n; i++) {
    cin >> s;
    for (long long j = 0; j < m; j++) {
      for (long long k = 0; k < 4; k++)
        if (ss[k] == s[j]) col[k][i + 1][j + 1] = 1;
    }
  }
  for (long long k = 0; k < 4; k++) {
    for (long long i = 1; i <= n; i++)
      for (long long j = 1; j <= m; j++)
        col[k][i][j] +=
            col[k][i - 1][j] + col[k][i][j - 1] - col[k][i - 1][j - 1];
  }
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= m; j++) {
      long long lim = min(min(i, j), min(n - i, m - j));
      for (long long len = 1; len <= lim; len++) {
        if (sum(0, i - len, j - len, i, j) != len * len) break;
        if (sum(1, i - len, j, i, j + len) != len * len) break;
        if (sum(2, i, j - len, i + len, j) != len * len) break;
        if (sum(3, i, j, i + len, j + len) != len * len) break;
        mx[i][j][0][0] = len * len;
      }
    }
  }
  sparse();
  while (q--) {
    long long r1, c1, r2, c2, ans = 0;
    cin >> r1 >> c1 >> r2 >> c2;
    long long s = 1, e = min(r2 - r1 + 1, c2 - c1 + 1);
    while (s <= e) {
      long long mid = (s + e) / 2;
      if (query(r1 + mid - 1, c1 + mid - 1, r2 - mid, c2 - mid) >= mid * mid) {
        s = mid + 1, ans = mid;
      } else
        e = mid - 1;
    }
    cout << 4 * ans * ans << '\n';
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  start = clock();
  cout << fixed << setprecision(15);
  while (t--) {
    solve();
  }
  double time_taken = double(clock() - start) / double(CLOCKS_PER_SEC);
  cerr << time_taken;
}
