#include <bits/stdc++.h>
using namespace std;
int cmp(long long first, long long second = 0) {
  return (first <= second) ? (first < second) ? -1 : 0 : 1;
}
struct point {
  long long first, second;
  point() : first(0), second(0) {}
  point(long long X, long long Y) : first(X), second(Y) {}
  int cmp(point a) {
    if (::cmp(first, a.first)) return ::cmp(first, a.first);
    return ::cmp(second, a.second);
  }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator*(long long a) { return point(first * a, second * a); }
  long long operator*(point a) { return first * a.first + second * a.second; }
  long long operator%(point a) { return first * a.second - second * a.first; }
  bool operator<(point a) { return cmp(a) == -1; }
  bool operator==(point a) { return cmp(a) == 0; }
  bool operator!=(point a) { return cmp(a) != 0; }
  bool operator<=(point a) { return cmp(a) <= 0; }
};
int ccw(point a, point b, point c) { return cmp((b - a) % (c - a)); }
bool between(point a, point b, point c) {
  return ccw(a, b, c) == 0 && (a - b) * (c - b) <= 0;
}
vector<point> v[3], sum;
int n, m;
bool radialcomp(point a, point b) {
  if ((a.first > 0 || (a.first == 0 && a.second > 0)) &&
      (b.first < 0 || (b.first == 0 && b.second < 0)))
    return 1;
  if ((b.first > 0 || (b.first == 0 && b.second > 0)) &&
      (a.first < 0 || (a.first == 0 && a.second < 0)))
    return 0;
  long long R = a % b;
  if (R) return R > 0;
  return a * a < b * b < 0;
}
bool inside(point& a, point& b, point& c, point& p) {
  vector<point> v;
  v.push_back(a);
  v.push_back(b);
  v.push_back(c);
  v.push_back(a);
  int t = 0;
  for (int(i) = (0); (i) < (3); (i)++) {
    if (!ccw(v[i], p, v[i + 1])) return between(v[i], p, v[i + 1]);
    t += ccw(v[i], p, v[i + 1]);
  }
  return abs(t) == 3;
}
int main() {
  for (int(k) = (0); (k) < (3); (k)++) {
    point aux(2e9, 2e9);
    int N, ini = -1;
    vector<point> vet;
    scanf("%d", &N);
    for (int(i) = (0); (i) < (N); (i)++) {
      int first, second;
      scanf("%d%d", &first, &second);
      vet.push_back(point(first, second));
      if (point(first, second) < aux)
        aux.first = first, aux.second = second, ini = i;
    }
    for (int(i) = (0); (i) < (N); (i)++) v[k].push_back(vet[(i + ini) % N]);
    v[k].push_back(v[k][0]);
  }
  vector<point> op;
  for (int(i) = (0); (i) < (3); (i)++)
    for (int(j) = (0); (j) < (((int)(v[i]).size()) - 1); (j)++)
      op.push_back(v[i][j + 1] - v[i][j]);
  sort((op).begin(), (op).end(), radialcomp);
  sum.push_back(v[0][0] + v[1][0] + v[2][0]);
  for (int(i) = (0); (i) < (((int)(op).size())); (i)++) {
    point pr = op[i] + sum.back();
    while (((int)(sum).size()) > 1 &&
           !ccw(sum[((int)(sum).size()) - 2], sum[((int)(sum).size()) - 1], pr))
      sum.pop_back();
    sum.push_back(pr);
  }
  sum.pop_back();
  n = ((int)(sum).size());
  scanf("%d", &m);
  for (int(i) = (0); (i) < (m); (i)++) {
    int first, second;
    scanf("%d%d", &first, &second);
    first += first + first, second += second + second;
    point p(first, second);
    if (p < sum[0]) {
      puts("NO");
      continue;
    }
    if (p.first == sum[0].first) {
      if (p == sum[0] ||
          (sum.back().first == p.first && between(sum[0], p, sum.back())))
        puts("YES");
      else
        puts("NO");
      continue;
    }
    int ini = 1, fim = n - 2, mid, pos = -1;
    while (ini <= fim) {
      mid = (ini + fim) >> 1;
      int v = ccw(sum[0], sum[mid], p) + ccw(sum[0], sum[mid + 1], p);
      if (v == 2)
        ini = mid + 1;
      else if (v == -2)
        fim = mid - 1;
      else {
        pos = mid;
        break;
      }
    }
    if (inside(sum[0], sum[pos], sum[pos + 1], p))
      puts("YES");
    else
      puts("NO");
  }
}
