#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e5 + 3;
const int MOD = (int)1e9 + 7;
const int infint = (int)1e9;
const long long inf = (long long)1e15;
int maxx, maxy, maxz, n, m, k, ans[MAXN];
struct segment {
  int seg[4 * MAXN];
  void build(int node, int st, int en, bool mn) {
    seg[node] = (mn == 1 ? infint : -infint);
    if (en - st < 2) return;
    int mid = (st + en) >> 1;
    build(node << 1, st, mid, mn);
    build(node << 1 | 1, mid, en, mn);
  }
  void update(int node, int st, int en, int idx, int val, bool mn) {
    if (en - st < 2) {
      if (mn)
        seg[node] = min(seg[node], val);
      else
        seg[node] = max(seg[node], val);
      return;
    }
    int mid = (st + en) >> 1;
    if (idx < mid)
      update(node << 1, st, mid, idx, val, mn);
    else
      update(node << 1 | 1, mid, en, idx, val, mn);
    if (mn)
      seg[node] = min(seg[node << 1], seg[node << 1 | 1]);
    else
      seg[node] = max(seg[node << 1], seg[node << 1 | 1]);
  }
  int get(int node, int st, int en, int l, int r, bool mn) {
    if (l >= en || st >= r) {
      if (mn)
        return infint;
      else
        return -infint;
    }
    if (l <= st && en <= r) return seg[node];
    int mid = (st + en) >> 1;
    if (mn)
      return min(get(node << 1, st, mid, l, r, mn),
                 get(node << 1 | 1, mid, en, l, r, mn));
    else
      return max(get(node << 1, st, mid, l, r, mn),
                 get(node << 1 | 1, mid, en, l, r, mn));
  }
} minnext, maxnext, minpre, maxpre;
int opx = infint, clox = -infint, opy = infint, cloy = -infint, opz = infint,
    cloz = -infint;
vector<pair<int, int> > P[MAXN];
vector<pair<int, pair<int, int> > > Q[MAXN];
vector<pair<int, int> > save;
void add(int y, int z) {
  if (y == -1) {
    if (z == -1)
      minpre.update(1, 0, MAXN, y, -infint, 1),
          maxpre.update(1, 0, MAXN, y, infint, 0),
          minnext.update(1, 0, MAXN, y, -infint, 1),
          maxnext.update(1, 0, MAXN, y, infint, 0);
    else if (z > cloz)
      minpre.update(1, 0, MAXN, y, z - 1, 1),
          minnext.update(1, 0, MAXN, y, z - 1, 1);
    else
      maxpre.update(1, 0, MAXN, y, z + 1, 0),
          maxnext.update(1, 0, MAXN, y, z + 1, 0);
  }
  if (y > cloy) {
    if (z == -1)
      minpre.update(1, 0, MAXN, y, -infint, 1),
          maxpre.update(1, 0, MAXN, y, infint, 0);
    else if (z > cloz)
      minpre.update(1, 0, MAXN, y, z - 1, 1);
    else
      maxpre.update(1, 0, MAXN, y, z + 1, 0);
  } else {
    if (z == -1)
      minnext.update(1, 0, MAXN, y, -infint, 1),
          maxnext.update(1, 0, MAXN, y, infint, 0);
    else if (z > cloz)
      minnext.update(1, 0, MAXN, y, z - 1, 1);
    else
      maxnext.update(1, 0, MAXN, y, z + 1, 0);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> maxx >> maxy >> maxz >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    opx = min(opx, x), clox = max(clox, x);
    opy = min(opy, y), cloy = max(cloy, y);
    opz = min(opz, z), cloz = max(cloz, z);
  }
  maxnext.build(1, 0, MAXN, 0);
  minnext.build(1, 0, MAXN, 1);
  maxpre.build(1, 0, MAXN, 0);
  minpre.build(1, 0, MAXN, 1);
  bool uncore = 0;
  for (int i = 0; i < m; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    if (opx <= x && x <= clox) x = -1;
    if (opy <= y && y <= cloy) y = -1;
    if (opz <= z && z <= cloz) z = -1;
    if (x == -1 && y == -1 && z == -1) uncore = 1;
    if (x == -1)
      save.push_back({y, z});
    else
      P[x].push_back({y, z});
  }
  for (int i = 0; i < k; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    if (opx <= x && x <= clox && opy <= y && y <= cloy && opz <= z && z <= cloz)
      ans[i] = 2;
    Q[x].push_back({y, {z, i}});
  }
  if (uncore) return cout << "INCORRECT", 0;
  cout << "CORRECT\n";
  for (auto u : save) add(u.first, u.second);
  for (int i = 1; i < MAXN; i++) {
    if (i > clox)
      for (auto u : P[i]) add(u.first, u.second);
    for (auto u : Q[i]) {
      int a = u.first, b = u.second.first;
      if (maxnext.get(1, 0, MAXN, a, MAXN, 0) <= b &&
          b <= minnext.get(1, 0, MAXN, a, MAXN, 1) &&
          maxpre.get(1, 0, MAXN, 0, a + 1, 0) <= b &&
          b <= minpre.get(1, 0, MAXN, 0, a + 1, 1))
        continue;
      else
        ans[u.second.second] = 1;
    }
  }
  maxnext.build(1, 0, MAXN, 0);
  minnext.build(1, 0, MAXN, 1);
  maxpre.build(1, 0, MAXN, 0);
  minpre.build(1, 0, MAXN, 1);
  for (auto u : save) add(u.first, u.second);
  for (int i = MAXN - 1; i >= 1; i--) {
    if (i < opx)
      for (auto u : P[i]) add(u.first, u.second);
    for (auto u : Q[i]) {
      int a = u.first, b = u.second.first;
      if (maxnext.get(1, 0, MAXN, a, MAXN, 0) <= b &&
          b <= minnext.get(1, 0, MAXN, a, MAXN, 1) &&
          maxpre.get(1, 0, MAXN, 0, a + 1, 0) <= b &&
          b <= minpre.get(1, 0, MAXN, 0, a + 1, 1))
        continue;
      else
        ans[u.second.second] = 1;
    }
  }
  for (int i = 0; i < k; i++)
    if (ans[i] == 2)
      cout << "OPEN\n";
    else if (ans[i] == 1)
      cout << "CLOSED\n";
    else
      cout << "UNKNOWN\n";
}
