#include <bits/stdc++.h>
using namespace std;
void DBcontinue() {}
template <typename T, typename... Args>
void DBcontinue(T head, Args... tail) {
  char *head_name = strtok(NULL, ", ");
  cerr << "," << string(head_name) << "=" << head;
  DBcontinue(tail...);
}
template <typename T, typename... Args>
void DBin(const char *names, T head, Args... tail) {
  char *names_buf = new char[strlen(names) + 1];
  strcpy(names_buf, names);
  char *head_name = strtok(names_buf, ", ");
  cerr << 31 << ": " << string(head_name) << "=" << head;
  DBcontinue(tail...);
  cerr << "\n";
  delete[] names_buf;
}
template <class Container>
void print_cont(const Container &cont) {
  cerr << "{ ";
  for (auto it = begin(cont); it != end(cont); ++it) {
    if (it != begin(cont)) cerr << ", ";
    cerr << *it;
  }
  cerr << " }\n";
}
struct v2ll {
  long long x, y;
  v2ll operator+(const v2ll &v) const { return {x + v.x, y + v.y}; }
  v2ll operator-(const v2ll &v) const { return {x - v.x, y - v.y}; }
  v2ll operator*(const long long &t) const { return {t * x, t * y}; }
  long long operator*(const v2ll &v) const { return x * v.x + y * v.y; }
  long long operator^(const v2ll &v) const { return x * v.y - y * v.x; }
  bool operator==(const v2ll &v) const { return x == v.x && y == v.y; }
  void scan() {
    scanf("%I64d", &x);
    scanf("%I64d", &y);
  }
  friend istream &operator>>(istream &in, v2ll &v);
  friend ostream &operator<<(ostream &out, const v2ll &v);
};
istream &operator>>(istream &in, v2ll &v) {
  in >> v.x >> v.y;
  return in;
}
ostream &operator<<(ostream &out, const v2ll &v) {
  out << (v.x) << " " << (v.y);
  return out;
}
vector<v2ll> minkowski_sum(const vector<v2ll> &A, const vector<v2ll> &B) {
  int nA = A.size(), nB = B.size(), i, ni, j, nj;
  auto cmp_coords = [](const v2ll &a, const v2ll &b) {
    return (a.x < b.x || a.x == b.x && a.y < b.y);
  };
  i = min_element(A.begin(), A.end(), cmp_coords) - A.begin();
  ni = (i + 1) % nA;
  j = min_element(B.begin(), B.end(), cmp_coords) - B.begin();
  nj = (j + 1) % nB;
  vector<v2ll> ret;
  do {
    ret.push_back(A[i] + B[j]);
    long long cr = ((A[ni] - A[i]) ^ (B[nj] - B[j]));
    if (cr > 0)
      i = ni, ni = (i + 1) % nA;
    else if (cr < 0)
      j = nj, nj = (j + 1) % nB;
    else {
      i = ni, ni = (i + 1) % nA;
      j = nj, nj = (j + 1) % nB;
    }
  } while (!(A[i] + B[j] == ret[0]));
  return ret;
}
bool in_convex_polygon(const v2ll &P, const vector<v2ll> &A) {
  int n = A.size();
  if (P == A[0]) return true;
  if (((A[0] - A[n - 1]) ^ (P - A[0])) < 0 || ((A[1] - A[0]) ^ (P - A[0])) < 0)
    return false;
  int i = lower_bound(A.begin() + 1, A.end(), P,
                      [&](const v2ll &a, const v2ll &b) {
                        return ((a - A[0]) ^ (b - A[0])) > 0;
                      }) -
          A.begin();
  static_cast<void>(0);
  if (((P - A[0]) ^ (A[i] - A[0])) == 0) return ((A[0] - P) * (A[i] - P)) <= 0;
  return ((A[i] - A[i - 1]) ^ (P - A[i])) >= 0;
}
void run() {
  vector<v2ll> A[3], S;
  v2ll P;
  for (int ip = 0; ip < 3; ++ip) {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
      P.scan();
      A[ip].push_back(P);
    }
  }
  S = minkowski_sum(A[0], A[1]);
  static_cast<void>(0);
  S = minkowski_sum(S, A[2]);
  static_cast<void>(0);
  int m;
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    P.scan();
    P = P * 3;
    puts(in_convex_polygon(P, S) ? "YES" : "NO");
  }
}
int main() {
  run();
  return 0;
}
