#include <bits/stdc++.h>
using namespace std;
template <typename T, size_t size>
void print(const T (&array)[size], size_t n) {
  cerr << "[";
  for (size_t i = 0; i < n; ++i) {
    if (i != 0) {
      cerr << ", ";
    }
    cerr << array[i];
  }
  cerr << "]";
  printf("\n");
}
template <typename F, typename S>
ostream &operator<<(ostream &os, const pair<F, S> &p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "{";
  typename vector<T>::const_iterator it;
  for (it = v.begin(); it != v.end(); it++) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "}";
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &v) {
  os << "[";
  typename set<T>::const_iterator it;
  for (it = v.begin(); it != v.end(); it++) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename F, typename S>
ostream &operator<<(ostream &os, const map<F, S> &v) {
  os << "[";
  typename map<F, S>::const_iterator it;
  for (it = v.begin(); it != v.end(); it++) {
    if (it != v.begin()) os << ", ";
    os << it->first << " = " << it->second;
  }
  return os << "]";
}
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
long long int gcd(long long int A, long long int B) {
  if (B == 0)
    return A;
  else
    return gcd(B, A % B);
}
long long int mod_exponentiation(long long int base, long long int n,
                                 long long int m) {
  if (base == 0) return 0;
  if (n == 0) return 1 % m;
  long long int half = mod_exponentiation(base, n / 2, m);
  if (n % 2 == 0)
    return (half % m * half % m) % m;
  else
    return ((half % m * half % m) % m * (base % m)) % m;
}
string note[4];
int main() {
  int n, m, k, t;
  cin >> n >> m >> k >> t;
  note[2] = "Grapes";
  note[1] = "Kiwis";
  note[0] = "Carrots";
  vector<int> v;
  for (int i = 0; i < k; i++) {
    int p, q;
    cin >> p >> q;
    v.push_back((p - 1) * m + q);
  }
  sort(v.begin(), v.end());
  for (int i = 0; i < t; i++) {
    int x, y;
    cin >> x >> y;
    int c = (x - 1) * m + y;
    int j = 0;
    int totalfound = 0;
    while (j < (int)v.size() and v[j] < c) {
      j++;
      totalfound++;
    }
    if (j == (int)v.size()) {
      int tf = c - totalfound - 1;
      tf = tf % 3;
      cout << note[tf] << endl;
    } else if (v[j] == c) {
      cout << "Waste" << endl;
    } else {
      int tf = c - totalfound - 1;
      tf = (tf % 3);
      cout << note[tf] << endl;
    }
  }
}
