#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const int oo = ~0u >> 2, mo = (int)1e9 + 7;
const int mn = 300000;
struct po {
  int x, y;
  po() { x = y = 0; }
  po(int _x, int _y) { x = _x, y = _y; }
  void readin() { scanf("%d%d", &x, &y); }
  bool operator<(const po &p) { return x < p.x || (x == p.x && y < p.y); }
  po operator+(const po &p) { return po(x + p.x, y + p.y); }
  po operator-(const po &p) { return po(x - p.x, y - p.y); }
  po operator*(int d) { return po(x * d, y * d); }
};
long long det(po a, po b, po c) {
  return (long long)(b.x - a.x) * (c.y - a.y) -
         (long long)(c.x - a.x) * (b.y - a.y);
}
long long dis(po a, po b) {
  return ((long long)(a.x - b.x) * (a.x - b.x)) +
         ((long long)(a.y - b.y) * (a.y - b.y));
}
po plb;
bool cmp(const po &a, const po &b) {
  long long t = det(plb, a, b);
  return t > 0 || (!t && dis(plb, a) > dis(plb, b));
}
struct CH {
  po P[mn];
  int n;
  void ins(po p) { P[n++] = p; }
  void readin() {
    scanf("%d", &n);
    for (int i = 0; i <= n - 1; ++i) P[i].readin();
  }
  bool Contain(po o) {
    long long t = det(P[0], P[1], o);
    if (t < 0 || (!t && dis(P[0], o) > dis(P[0], P[1]))) return 0;
    t = det(P[0], P[n - 1], o);
    if (t > 0 || (!t && dis(P[0], o) > dis(P[0], P[n - 1]))) return 0;
    int l = 1, r = n - 2, w = 0;
    while (l <= r) {
      int m = (l + r) / 2;
      po p = P[m];
      long long t = det(P[0], P[m], o);
      if (t >= 0)
        w = m, l = m + 1;
      else
        r = m - 1;
    }
    l = w, r = (l + 1) % n;
    po p1 = P[l], p2 = P[r];
    t = det(p1, p2, o);
    return t >= 0;
  }
  void ConvexHull() {
    for (int i = 1; i <= n - 1; ++i)
      if (P[i] < P[0]) swap(P[0], P[i]);
    plb = P[0];
    sort(P + 1, P + n, cmp);
    int r = 1;
    for (int i = 2; i <= n - 1; ++i)
      if (det(P[0], P[r], P[i])) {
        while (r && det(P[r - 1], P[r], P[i]) <= 0) --r;
        P[++r] = P[i];
      }
    n = r + 1;
  }
} Q[5];
void mrg(CH &A, CH &B, CH &C) {
  C.n = 0;
  int l = 0, r = 0;
  do {
    int nl = (l + 1) % A.n, nr = (r + 1) % B.n;
    po O = A.P[l] + B.P[r], P1 = A.P[l] + B.P[nr], P2 = A.P[nl] + B.P[r];
    long long t = det(O, P1, P2);
    if (t > 0 || (!t && dis(O, P1) > dis(O, P2)))
      C.ins(P1), r = nr;
    else
      C.ins(P2), l = nl;
  } while (l || r);
  C.ConvexHull();
}
int main() {
  for (int i = 0; i <= 2; ++i) Q[i].readin(), Q[i].ConvexHull();
  mrg(Q[0], Q[1], Q[3]);
  mrg(Q[2], Q[3], Q[4]);
  int Ca;
  scanf("%d", &Ca);
  while (Ca--) {
    po p;
    p.readin();
    p = p * 3;
    bool flag = Q[4].Contain(p);
    if (flag)
      printf("YES\n");
    else
      printf("NO\n");
  }
}
