#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
using namespace std;
inline char gc() {
  static char now[1 << 16], *S, *T;
  if (T == S) {
    T = (S = now) + fread(now, 1, 1 << 16, stdin);
    if (T == S) return EOF;
  }
  return *S++;
}
inline long long read() {
  register long long x = 0, f = 1;
  char ch = gc();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = gc();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = gc();
  }
  return (f == 1) ? x : -x;
}
int n, m, Q, xmax, ymax, zmax, D, cnt;
struct point {
  int x[3];
  inline int &operator[](const int &a) { return x[a]; }
} a[1010101];
struct node {
  int mi[3], ma[3], son[2];
  point x;
} g[220101];
inline void chkmin(int &x, const int &y) { return (void)(x = (x > y ? y : x)); }
inline void chkmax(int &x, const int &y) { return (void)(x = (x < y ? y : x)); }
inline bool cmp(point a, point b) { return (a[D] < b[D]); }
inline void pushup(int rt) {
  register int i, j;
  for (i = 0; i < 3; i++) {
    g[rt].ma[i] = g[rt].mi[i] = g[rt].x[i];
  }
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 2; j++) {
      if (!g[rt].son[j]) continue;
      chkmin(g[rt].mi[i], g[g[rt].son[j]].mi[i]);
      chkmax(g[rt].ma[i], g[g[rt].son[j]].ma[i]);
    }
  }
}
void build(int &rt, int lb, int rb, int nowD) {
  if (lb > rb) return;
  rt = ++cnt;
  D = nowD;
  nth_element(a + lb, a + ((lb + rb) >> 1), a + rb + 1, cmp);
  g[rt].x = a[((lb + rb) >> 1)];
  build(g[rt].son[0], lb, ((lb + rb) >> 1) - 1, (nowD + 1) % 3);
  build(g[rt].son[1], ((lb + rb) >> 1) + 1, rb, (nowD + 1) % 3);
  pushup(rt);
}
int ans;
struct QUE {
  int mi[3], ma[3];
} ori, now, _now;
inline bool operator==(const QUE &a, const QUE &b) {
  for (int i = 0; i < 3; i++) {
    if (a.mi[i] != b.mi[i] || a.ma[i] != b.ma[i]) return 0;
  }
  return 1;
}
inline void init(QUE &a) {
  memset(a.mi, 0x3f, sizeof a.mi);
  memset(a.ma, 0, sizeof a.ma);
}
void _query(int rt) {
  if (!rt) return;
  bool notout = 1;
  register int i;
  for (i = 0; i < 3; i++) {
    notout &= (!(g[rt].mi[i] > _now.ma[i] || g[rt].ma[i] < _now.mi[i]));
  }
  if (!notout) return;
  bool init = 1;
  for (i = 0; i < 3; i++) {
    init &= (g[rt].mi[i] >= _now.mi[i] && g[rt].ma[i] <= _now.ma[i]);
  }
  if (init) return (void)(ans = 1);
  init = 1;
  for (i = 0; i < 3; i++) {
    init &= (g[rt].x[i] >= _now.mi[i] && g[rt].x[i] <= _now.ma[i]);
  }
  if (init) return (void)(ans = 1);
  _query(g[rt].son[0]);
  if (ans) return;
  _query(g[rt].son[1]);
}
inline int query(QUE a) {
  _now = a;
  ans = 0;
  _query(1);
  return ans;
}
signed main() {
  xmax = read(), ymax = read(), zmax = read();
  n = read(), m = read(), Q = read();
  init(ori);
  register int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 0; j < 3; j++) {
      int xx = read();
      chkmin(ori.mi[j], xx);
      chkmax(ori.ma[j], xx);
    }
  }
  for (i = 1; i <= m; i++) {
    a[i].x[0] = read(), a[i].x[1] = read(), a[i].x[2] = read();
  }
  int root;
  build(root, 1, m, 0);
  if (query(ori)) {
    puts("INCORRECT");
    return 0;
  } else {
    puts("CORRECT");
  }
  while (Q--) {
    now = ori;
    for (j = 0; j < 3; j++) {
      int xx = read();
      chkmin(now.mi[j], xx);
      chkmax(now.ma[j], xx);
    }
    if (now == ori)
      puts("OPEN");
    else if (query(now)) {
      puts("CLOSED");
    } else {
      puts("UNKNOWN");
    }
  }
  return 0;
}
