#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50, inf = 1e9;
inline int gi() {
  char ch = getchar();
  int q = 0, x = 0;
  while (ch < '0' || ch > '9') q = (ch == '-' ? 1 : q), ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return q ? (-x) : x;
}
int las, n, m, k, xr, yr, zr;
namespace seg {
int rt[N << 2], tr[N * 90], ls[N * 90], rs[N * 90], tt;
void ins(int &x, int l, int r, int y) {
  if (!x) x = ++tt;
  ++tr[x];
  if (l == r) return;
  int mid = (l + r) >> 1;
  if (y <= mid)
    ins(ls[x], l, mid, y);
  else
    ins(rs[x], mid + 1, r, y);
  return;
}
void Ins(int x, int l, int r, int y, int t) {
  ins(rt[x], 1, zr, t);
  if (l == r) return;
  int mid = (l + r) >> 1;
  if (y <= mid)
    Ins(x << 1, l, mid, y, t);
  else
    Ins(x << 1 | 1, mid + 1, r, y, t);
  return;
}
int qry(int x, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) return tr[x];
  int mid = (l + r) >> 1, ans = 0;
  if (ql <= mid) ans += qry(ls[x], l, mid, ql, qr);
  if (qr > mid) ans += qry(rs[x], mid + 1, r, ql, qr);
  return ans;
}
int Qry(int x, int l, int r, int Ql, int Qr, int ql, int qr) {
  if (Ql <= l && r <= Qr) return qry(rt[x], 1, zr, ql, qr);
  int mid = (l + r) >> 1, ans = 0;
  if (Ql <= mid) ans += Qry(x << 1, l, mid, Ql, Qr, ql, qr);
  if (Qr > mid) ans += Qry(x << 1 | 1, mid + 1, r, Ql, Qr, ql, qr);
  return ans;
}
}  // namespace seg
struct data {
  int x, y, z;
  bool operator<(const data &c) const { return x < c.x; }
} a[N], b[N], mx, mn, ql, qr;
struct date {
  int x, l, r, L, R, t, s;
  bool operator<(const date &c) const { return x < c.x; }
} w[N * 2];
int vis[N], tot;
int main() {
  xr = gi(), yr = gi(), zr = gi(), n = gi(), m = gi(), k = gi();
  mx = (data){0, 0, 0};
  mn = (data){inf, inf, inf};
  for (int i = 1; i <= n; ++i) {
    a[i] = (data){gi(), gi(), gi()};
    mx.x = max(mx.x, a[i].x), mn.x = min(mn.x, a[i].x);
    mx.y = max(mx.y, a[i].y), mn.y = min(mn.y, a[i].y);
    mx.z = max(mx.z, a[i].z), mn.z = min(mn.z, a[i].z);
  }
  int flag = 0;
  for (int i = 1; i <= m; ++i) {
    b[i] = (data){gi(), gi(), gi()};
    if (b[i].x >= mn.x && b[i].x <= mx.x && b[i].y >= mn.y && b[i].y <= mx.y &&
        b[i].z >= mn.z && b[i].z <= mx.z)
      flag = 1;
  }
  if (flag)
    return puts("INCORRECT"), 0;
  else
    puts("CORRECT");
  for (int i = 1; i <= k; ++i) {
    ql = (data){gi(), gi(), gi()};
    flag = 0;
    if (ql.x < mn.x)
      qr.x = mx.x, flag = 1;
    else if (ql.x > mx.x)
      qr.x = ql.x, ql.x = mn.x, flag = 1;
    else
      ql.x = mn.x, qr.x = mx.x;
    if (ql.y < mn.y)
      qr.y = mx.y, flag = 1;
    else if (ql.y > mx.y)
      qr.y = ql.y, ql.y = mn.y, flag = 1;
    else
      ql.y = mn.y, qr.y = mx.y;
    if (ql.z < mn.z)
      qr.z = mx.z, flag = 1;
    else if (ql.z > mx.z)
      qr.z = ql.z, ql.z = mn.z, flag = 1;
    else
      ql.z = mn.z, qr.z = mx.z;
    if (!flag) {
      vis[i] = -1;
      continue;
    }
    w[++tot] = (date){ql.x - 1, ql.y, qr.y, ql.z, qr.z, i, -1};
    w[++tot] = (date){qr.x, ql.y, qr.y, ql.z, qr.z, i, 1};
  }
  sort(w + 1, w + tot + 1);
  sort(b + 1, b + m + 1);
  int id = 1, Id = 1;
  while (Id <= tot && w[Id].x == 0) ++Id;
  for (int i = 1; i <= xr; ++i) {
    las = seg::tt;
    while (id <= m && b[id].x == i) seg::Ins(1, 1, yr, b[id].y, b[id].z), ++id;
    while (Id <= tot && w[Id].x == i)
      vis[w[Id].t] +=
          w[Id].s * seg::Qry(1, 1, yr, w[Id].l, w[Id].r, w[Id].L, w[Id].R),
          ++Id;
  }
  for (int i = 1; i <= k; ++i)
    if (vis[i] < 0)
      puts("OPEN");
    else if (vis[i] > 0)
      puts("CLOSED");
    else
      puts("UNKNOWN");
  return 0;
}
