#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e4 + 5;
const int INF = 2147483647;
int n, m, t, s, q;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) (ch == '-') && (f = -f), ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x * f;
}
struct Vector {
  long long x, y;
  Vector(long long x = 0, long long y = 0) : x(x), y(y){};
  inline void init() { x = read(), y = read(); }
  inline void print() { printf("(%lld,%lld)\n", x, y); }
  inline Vector operator+(const Vector &tmp) const {
    return Vector(x + tmp.x, y + tmp.y);
  }
  inline Vector operator-() const { return Vector(-x, -y); }
  inline Vector operator-(const Vector &tmp) const {
    return Vector(x - tmp.x, y - tmp.y);
  }
  inline Vector operator*(const long long &tmp) const {
    return Vector(x * tmp, y * tmp);
  }
  inline Vector operator/(const long long &tmp) const {
    return Vector(x / tmp, y / tmp);
  }
  inline long long operator*(const Vector &tmp) const {
    return x * tmp.x + y * tmp.y;
  }
  inline long long operator%(const Vector &tmp) const {
    return x * tmp.y - y * tmp.x;
  }
} a[MAXN * 3], b[MAXN], c[MAXN], d[MAXN * 2];
Vector stk[MAXN * 3];
int top;
inline bool cmp(const Vector &a, const Vector &b) {
  return a % b ? a % b > 0 : a * a < b * b;
}
inline void tuke(Vector *a, int &n) {
  int i, id;
  Vector minn(INF, INF);
  for (i = 1; i <= n; ++i)
    if (a[i].y < minn.y || (a[i].y == minn.y && a[i].x < minn.x))
      minn = a[i], id = i;
  swap(a[id], a[1]);
  for (i = 1; i <= n; ++i) a[i] = a[i] - minn;
  sort(a + 2, a + n + 1, cmp);
  stk[top = 1] = a[1];
  for (i = 2; i <= n; ++i) {
    while (top > 1 && (a[i] - stk[top - 1]) % (stk[top] - stk[top - 1]) >= 0)
      --top;
    stk[++top] = a[i];
  }
  for (i = 1; i <= top; ++i) a[i] = stk[i] + minn;
  for (i = top + 1; i <= n; ++i) a[i] = 0;
  n = top;
  a[n + 1] = a[1];
  a[0] = a[n];
}
Vector s1[MAXN * 3], s2[MAXN * 3];
inline void minkowski(Vector *a, int n, Vector *b, int m, Vector *c, int &s) {
  int i, j;
  for (i = 1; i <= n; ++i) s1[i] = a[i + 1] - a[i];
  for (i = 1; i <= m; ++i) s2[i] = b[i + 1] - b[i];
  c[s = 1] = a[1] + b[1];
  i = 1;
  j = 1;
  while (i <= n && j <= m)
    ++s, c[s] = c[s - 1] + (s1[i] % s2[j] > 0 ? s1[i++] : s2[j++]);
  while (i <= n) ++s, c[s] = c[s - 1] + s1[i++];
  while (j <= m) ++s, c[s] = c[s - 1] + s2[j++];
  tuke(c, s);
}
inline bool iscontain(const Vector &tmp, const Vector *a, const int &n) {
  if (tmp % a[2] > 0 || a[n] % tmp > 0) return 0;
  int pos = lower_bound(a + 1, a + n + 1, tmp, cmp) - a - 1;
  if (tmp % a[pos + 1] == 0 && tmp * tmp > a[pos + 1] * a[pos + 1]) return 0;
  return (tmp - a[pos]) % (a[pos + 1] - a[pos]) <= 0;
}
int main() {
  register int i;
  n = read();
  for (i = 1; i <= n; ++i) a[i].init();
  tuke(a, n);
  m = read();
  for (i = 1; i <= m; ++i) b[i].init();
  tuke(b, m);
  t = read();
  for (i = 1; i <= t; ++i) c[i].init();
  tuke(c, t);
  minkowski(a, n, b, m, d, s);
  minkowski(d, s, c, t, a, n);
  Vector begin = a[1];
  for (i = 1; i <= n; ++i) a[i] = a[i] - begin;
  q = read();
  for (i = 1; i <= q; ++i) {
    Vector tmp;
    tmp.init();
    tmp = tmp * 3;
    printf(iscontain(tmp - begin, a, n) ? "YES\n" : "NO\n");
  }
  return 0;
}
