#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
template <typename U>
inline void smin(U& a, U b) {
  if (a > b) a = b;
}
template <typename U>
inline void smax(U& a, U b) {
  if (a < b) a = b;
}
struct cube {
  int a[3];
  cube(int first = 0, int second = 0, int z = 0) {
    a[0] = first;
    a[1] = second;
    a[2] = z;
  }
  void min(const cube& C) {
    for (int i = 0; i < 3; i++) smin(a[i], C.a[i]);
  }
  void max(const cube& C) {
    for (int i = 0; i < 3; i++) smax(a[i], C.a[i]);
  }
  void in() {
    for (int i = 0; i < 3; i++) scanf("%d", a + i);
  }
  void pr() {
    for (int i = 0; i < 3; i++) printf("%d ", a[i]);
    puts("");
  }
};
const int NN = 1e5 + 10, inf = 1e6;
cube out[NN];
cube que[NN];
int ans[NN];
char str[3][10] = {"UNKNOWN", "OPEN", "CLOSED"};
int main() {
  vector<pii> vec[8];
  cube cei = (1, 1, 1), bot, tmp;
  bot.in();
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < n; i++) {
    tmp.in();
    bot.min(tmp);
    cei.max(tmp);
  }
  auto is_in = [&](const cube& C) {
    for (int i = 0; i < 3; i++)
      if (C.a[i] < bot.a[i] || cei.a[i] < C.a[i]) return 0;
    return 1;
  };
  auto settle = [&](cube& C) {
    for (int i = 0; i < 3; i++) {
      if (C.a[i] > cei.a[i])
        C.a[i] -= cei.a[i] - bot.a[i];
      else
        smin(C.a[i], bot.a[i]);
    }
  };
  auto direct = [&](const cube& C, int bit) {
    for (int i = 0, j; i < 3; i++) {
      j = (bit >> i) & 1;
      if (j == 0 && C.a[i] < bot.a[i]) return 0;
      if (j == 1 && C.a[i] > bot.a[i]) return 0;
    }
    return 1;
  };
  for (int i = 0, j; i < m; i++) {
    out[i].in();
    if (is_in(out[i])) return puts("INCORRECT"), 0;
    settle(out[i]);
    for (j = 0; j < 8; j++)
      if (direct(out[i], j)) {
        vec[j].push_back({abs(out[i].a[2] - bot.a[2]), i});
      }
  }
  puts("CORRECT");
  for (int i = 0, j; i < k; i++) {
    que[i].in();
    if (ans[i] = is_in(que[i])) continue;
    settle(que[i]);
    for (j = 0; j < 8; j++)
      if (direct(que[i], j)) {
        vec[j].push_back({abs(que[i].a[2] - bot.a[2]), inf + i});
      }
  }
  map<int, int> mp;
  int first, second;
  for (int i = 0; i < 8; i++) {
    sort(vec[i].begin(), vec[i].end());
    mp.clear();
    mp[mp[0] = inf] = 0;
    for (auto p : vec[i]) {
      if (p.second < inf) {
        first = abs(out[p.second].a[0] - bot.a[0]) + 1;
        second = abs(out[p.second].a[1] - bot.a[1]) + 1;
        auto it = --mp.lower_bound(first + 1);
        if (it->second >= second) {
          mp[first] = second;
          while (true) {
            it = mp.lower_bound(first + 1);
            if (it->second < second) break;
            mp.erase(it);
          }
        }
      } else {
        p.second -= inf;
        first = abs(que[p.second].a[0] - bot.a[0]) + 1;
        second = abs(que[p.second].a[1] - bot.a[1]) + 1;
        auto it = --mp.lower_bound(first + 1);
        if (it->second <= second) ans[p.second] = 2;
      }
    }
  }
  for (int i = 0; i < k; i++) {
    printf("%s\n", str[ans[i]]);
  }
  return 0;
}
