#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
struct vec {
  long long x, y;
  vec() {
    this->x = 0ll;
    this->y = 0ll;
  }
  vec(long long nx, long long ny) {
    this->x = nx;
    this->y = ny;
  }
  long long len() { return x * x + y * y; }
  vec operator-(const vec &b) { return vec(x - b.x, y - b.y); }
  vec operator+(const vec &b) { return vec(x + b.x, y + b.y); }
  vec operator*(const long long &k) { return vec(x * k, y * k); }
  long long operator%(const vec &b) { return x * b.y - y * b.x; }
  long long operator*(const vec &b) { return x * b.x + y * b.y; }
};
bool cmp1(vec a, vec b) {
  if (a.x != b.x)
    return a.x < b.x;
  else
    return a.y < b.y;
}
bool cmp2(vec a, vec b) {
  if (a % b == 0ll)
    return a.len() < b.len();
  else
    return a % b > 0ll;
}
bool less1(vec a, vec b) { return a % b > 0ll; }
vector<vec> convex_hull(vector<vec> arr) {
  int n = arr.size();
  sort(arr.begin(), arr.end(), cmp1);
  vec start = arr[0];
  for (int i = 0; i < n; i++) arr[i] = arr[i] - start;
  sort(arr.begin(), arr.end(), cmp2);
  vector<vec> q;
  for (int i = 0; i < n; i++) {
    if (q.size() < 2) {
      q.push_back(arr[i]);
      continue;
    }
    while (q.size() > 1) {
      vec a = q[q.size() - 2] - q.back();
      vec b = arr[i] - q.back();
      if (a % b < 0ll) break;
      q.pop_back();
    }
    q.push_back(arr[i]);
  }
  for (int i = 0; i < q.size(); i++) q[i] = q[i] + start;
  return q;
}
vector<vec> mincowski(vector<vec> a, vector<vec> b) {
  int numa = 0, numb = 0;
  for (int i = 0; i < a.size(); i++) {
    if (a[i].x > a[numa].x) continue;
    if (a[i].x < a[numa].x)
      numa = i;
    else if (a[i].y < a[numa].y)
      numa = i;
  }
  for (int i = 0; i < b.size(); i++) {
    if (b[i].x > b[numb].x) continue;
    if (b[i].x < b[numb].x)
      numb = i;
    else if (b[i].y < b[numb].y)
      numb = i;
  }
  vector<vec> edgesa(a.size()), edgesb(b.size());
  for (int i = 0; i < a.size(); i++)
    edgesa[i] = a[(numa + i + 1) % a.size()] - a[(numa + i) % a.size()];
  for (int i = 0; i < b.size(); i++)
    edgesb[i] = b[(numb + i + 1) % b.size()] - b[(numb + i) % b.size()];
  vector<vec> edges((int)a.size() + (int)b.size());
  merge(edgesa.begin(), edgesa.end(), edgesb.begin(), edgesb.end(),
        edges.begin(), less1);
  vec prev = a[numa] + b[numb];
  vector<vec> res(edges.size());
  for (int i = 0; i < res.size(); i++) {
    res[i] = edges[i] + prev;
    prev = res[i];
  }
  return res;
}
int num = 0;
vector<vec> edge, sum;
bool check_trian(vec a, vec b, vec c, vec q) {
  long long S = abs((a - b) % (c - b));
  long long s1 = abs((a - q) % (b - q));
  long long s2 = abs((b - q) % (c - q));
  long long s3 = abs((c - q) % (a - q));
  return (S == s1 + s2 + s3);
}
bool inside(vec q) {
  if (q.x < sum[num].x) return false;
  q = q - sum[num];
  if (q % edge[0] > 0ll || edge.back() % q > 0ll) return false;
  int p = lower_bound(edge.begin(), edge.end(), q, less1) - edge.begin();
  p += (p == 0);
  return check_trian(vec(), edge[p - 1], edge[p], q);
}
int main() {
  srand(1373737);
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  vector<vector<vec> > arr(3);
  for (int z = 0; z < 3; z++) {
    int n;
    cin >> n;
    arr[z].resize(n);
    for (int i = 0; i < n; i++) cin >> arr[z][i].x >> arr[z][i].y;
    arr[z] = convex_hull(arr[z]);
  }
  sum = convex_hull(mincowski(mincowski(arr[0], arr[1]), arr[2]));
  edge.resize((int)sum.size() - 1);
  for (int i = 0; i < sum.size(); i++) {
    if (sum[i].x > sum[num].x) continue;
    if (sum[i].x < sum[num].x)
      num = i;
    else if (sum[i].y < sum[num].y)
      num = i;
  }
  for (int i = 0; i < edge.size(); i++)
    edge[i] = sum[(num + i + 1) % sum.size()] - sum[num];
  int ask;
  cin >> ask;
  for (int i = 0; i < ask; i++) {
    vec cur;
    cin >> cur.x >> cur.y;
    cur = cur * 3ll;
    if (inside(cur))
      cout << "YES\n";
    else
      cout << "NO\n";
  }
  return 0;
}
