#include <bits/stdc++.h>
using namespace std;
const double PI = 2 * acos(0.0);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rng_64(chrono::steady_clock::now().time_since_epoch().count());
const string DIGITS = "0123456789";
const string ALPH = "abcdefghijklmnopqrstuvwxyz";
template <class T0, class T1>
inline ostream &operator<<(ostream &out, pair<T0, T1> &a) {
  return out << "{" << a.first << ", " << a.second << "}";
}
template <class T0, class T1, class T2>
inline ostream &operator<<(ostream &out, tuple<T0, T1, T2> &a) {
  return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a)
             << "}";
}
template <class T0, class T1, class T2, class T3>
inline ostream &operator<<(ostream &out, tuple<T0, T1, T2, T3> &a) {
  return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a)
             << ", " << get<3>(a) << "}";
}
template <class T>
inline ostream &operator<<(ostream &out, vector<T> &a) {
  out << "[";
  for (int i = 0; i < (int)(a.size()); ++i)
    out << a[i] << vector<string>{", ", "]  "}[i + 1 == a.size()];
  return out;
}
void smain();
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(10) << fixed;
  smain();
  return 0;
}
const int N = 510;
int n, m;
vector<string> t;
vector<vector<int> > glav[4];
void kek(char p, int u) {
  vector<vector<int> > a(n, vector<int>(m));
  auto b = a, c = a;
  for (int i = 0; i < n; i++) {
    int u = 0;
    string s = t[i];
    for (int j = 0; j < m; j++) {
      if (s[j] == p) {
        a[i][j] = 1;
        u++;
      } else {
        a[i][j] = 0;
        u = 0;
      }
      b[i][j] = u;
    }
  }
  for (int i = 0; i < m; i++) {
    int u = 0;
    for (int j = n - 1; j >= 0; j--) {
      if (a[j][i] == 1)
        u++;
      else
        u = 0;
      c[j][i] = u;
    }
  }
  vector<vector<int> > ans(n, vector<int>(m));
  for (int i = n - 1; i >= 0; i--) {
    for (int j = 0; j < m; j++) {
      if (a[i][j] == 0) continue;
      if (j == 0 || i == n - 1) {
        ans[i][j] = 1;
      } else {
        int v = min(b[i][j], c[i][j]);
        ans[i][j] = min(ans[i + 1][j - 1] + 1, v);
      }
    }
  }
  glav[u] = ans;
}
int flex[N][N];
int lol[N][N][251];
int get(int r, int c, int k) {
  if (r < 0 || c < 0) return 0;
  return lol[r][c][k];
}
int get(int r1, int c1, int r2, int c2, int k) {
  return get(r2, c2, k) - get(r1 - 1, c2, k) - get(r2, c1 - 1, k) +
         get(r1 - 1, c1 - 1, k);
}
void smain() {
  int q;
  cin >> n >> m >> q;
  string s;
  for (int i = 0; i < n; i++) {
    cin >> s;
    t.push_back(s);
  }
  kek('G', 0);
  kek('R', 1);
  kek('B', 2);
  kek('Y', 3);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = 1;; k++) {
        if (i + k >= n || j - k < 0) break;
        if (glav[0][i][j] >= k && glav[1][i][j - k] >= k &&
            glav[2][i + k][j] >= k && glav[3][i + k][j - k] >= k) {
          flex[i][j] = k;
        }
      }
    }
  }
  for (int k = 1; k <= 250; k++) {
    for (int i = 0; i < n; i++) {
      int prev = 0;
      for (int j = 0; j < m; j++) {
        prev += (flex[i][j] == k);
        if (i) {
          lol[i][j][k] += lol[i - 1][j][k];
        }
        lol[i][j][k] += prev;
      }
    }
  }
  while (q--) {
    int r1, c1, r2, c2;
    cin >> r1 >> c1 >> r2 >> c2;
    r1--;
    c1--;
    r2--;
    c2--;
    swap(c1, c2);
    int l = 0, r = 251;
    while (l + 1 < r) {
      int mid = l + r >> 1;
      int r3 = r2 - mid * 2 + 1;
      int c3 = c2 + mid * 2 - 1;
      bool flag = true;
      if (r3 < r1 || c3 > c1) flag = false;
      if (flag) {
        if (get(r1, c3, r3, c1, mid) == 0) flag = false;
      }
      if (flag)
        l = mid;
      else
        r = mid;
    }
    cout << 1LL * l * 2 * l * 2 << "\n";
  }
}
