#include <bits/stdc++.h>
using namespace std;
const double eps = (double)1e-8;
const double INF = (double)1e100;
const double pi = (double)acos(-1.0);
const int maxn = 50005;
inline int sig(double x) { return x < -eps ? -1 : x > eps; }
struct point {
  double x, y;
  point(double a = 0, double b = 0) : x(a), y(b) {}
  inline point operator+(const point &t) const {
    return point(x + t.x, y + t.y);
  }
  inline point operator-(const point &t) const {
    return point(x - t.x, y - t.y);
  }
  inline point operator*(const double p) const { return point(x * p, y * p); }
  inline point operator/(const double p) const { return point(x / p, y / p); }
  inline double operator*(const point &t) const { return x * t.x + y * t.y; }
  inline double operator^(const point &t) const { return x * t.y - y * t.x; }
  inline bool operator<(const point &t) const {
    return sig(x - t.x) < 0 || (!sig(x - t.x) && sig(y - t.y) < 0);
  }
  inline bool operator<<(const point &t) const {
    return sig(y - t.y) < 0 || (!sig(y - t.y) && sig(x - t.x) < 0);
  }
  inline int input() { return scanf("%lf%lf", &x, &y); }
  inline void output() { printf("%.2lf %.2lf\n", x, y); }
};
point pp[maxn], tch[maxn * 3], ch[maxn * 3];
struct Line {
  point p;
  double ang;
  Line() {}
  inline bool operator<(const Line &t) const { return sig(ang - t.ang) < 0; }
};
Line line[maxn * 3];
int cx(point *p, int n, point *ch) {
  int m = 0;
  for (int i = 0; i < n; i++) {
    while (m > 1 && sig((ch[m - 1] - ch[m - 2]) ^ (p[i] - ch[m - 2])) <= 0) m--;
    ch[m++] = p[i];
  }
  int t = m;
  for (int i = n - 2; i >= 0; i--) {
    while (m > t && sig((ch[m - 1] - ch[m - 2]) ^ (p[i] - ch[m - 2])) <= 0) m--;
    ch[m++] = p[i];
  }
  if (n > 1) m--;
  return m;
}
int main() {
  int n;
  while (~scanf("%d", &n)) {
    int m = 0;
    point s, pmi;
    pmi = point(INF, INF);
    for (int i = 0; i < n; i++) {
      pp[i].input();
      if (pp[i] << pmi) pmi = pp[i];
    }
    pp[n] = pp[0];
    for (int i = 0; i < n; i++) {
      line[m].p = pp[i + 1] - pp[i];
      line[m].ang = atan2(line[m].p.y, line[m].p.x);
      if (sig(line[m].ang) < 0) line[m].ang += 2.0 * pi;
      m++;
    }
    s = s + pmi;
    scanf("%d", &n);
    pmi = point(INF, INF);
    for (int i = 0; i < n; i++) {
      pp[i].input();
      if (pp[i] << pmi) pmi = pp[i];
    }
    pp[n] = pp[0];
    for (int i = 0; i < n; i++) {
      line[m].p = pp[i + 1] - pp[i];
      line[m].ang = atan2(line[m].p.y, line[m].p.x);
      if (sig(line[m].ang) < 0) line[m].ang += 2.0 * pi;
      m++;
    }
    s = s + pmi;
    scanf("%d", &n);
    pmi = point(INF, INF);
    for (int i = 0; i < n; i++) {
      pp[i].input();
      if (pp[i] << pmi) pmi = pp[i];
    }
    pp[n] = pp[0];
    for (int i = 0; i < n; i++) {
      line[m].p = pp[i + 1] - pp[i];
      line[m].ang = atan2(line[m].p.y, line[m].p.x);
      if (sig(line[m].ang) < 0) line[m].ang += 2.0 * pi;
      m++;
    }
    s = s + pmi;
    s = s / 3.0;
    tch[0] = s;
    sort(line, line + m);
    for (int i = 0; i < m; i++) tch[i + 1] = tch[i] + (line[i].p / 3.0);
    m = cx(tch, m, ch);
    int q;
    scanf("%d", &q);
    point tar;
    s = (ch[0] + ch[m / 3] + ch[2 * m / 3]) / 3.0;
    for (int i = 0; i < q; i++) {
      tar.input();
      int l = 0, r = m, mid;
      while (l + 1 < r) {
        mid = (l + r) >> 1;
        if (sig((ch[l] - s) ^ (ch[mid] - s)) >= 0) {
          if (sig((ch[l] - s) ^ (tar - s)) >= 0 &&
              sig((tar - s) ^ (ch[mid] - s)) > 0)
            r = mid;
          else
            l = mid;
        } else {
          if (sig((ch[mid] - s) ^ (tar - s)) >= 0 &&
              sig((tar - s) ^ (ch[l] - s)) > 0)
            l = mid;
          else
            r = mid;
        }
      }
      if (sig((ch[r] - ch[l]) ^ (tar - ch[l])) >= 0)
        puts("YES");
      else
        puts("NO");
    }
  }
  return 0;
}
