#include <bits/stdc++.h>
using namespace std;
const int maxn = 100100;
const int INF = 1e9 + 9;
const int bae = 1e9 + 7;
struct Point {
  long long x, y;
  Point() {}
  Point(const long long &x, const long long &y) : x(x), y(y) {}
  bool operator<(const Point &b) const {
    return (x != b.x ? x < b.x : y < b.y);
  }
  bool operator==(const Point &b) { return (x == b.x && y == b.y); }
  void err() { cerr << x << " " << y << "\n"; }
};
struct Vector {
  long long x, y;
  Vector() {}
  Vector(const long long &x, const long long &y) : x(x), y(y) {}
  Vector(const Point &f, const Point &t) : x(t.x - f.x), y(t.y - f.y) {}
  double len() { return sqrt(x * x + y * y); }
};
long long dotProduct(const Vector &a, const Vector &b) {
  return a.x * b.x + a.y * b.y;
}
long long crossProduct(const Vector &a, const Vector &b) {
  return a.x * b.y - a.y * b.x;
}
int n, q;
Point a[maxn], s_pt(INF, INF);
bool in_polygon(Point &p) {
  Vector p_vec(s_pt, p);
  if (crossProduct(p_vec, Vector(s_pt, a[1])) <= 0) return 0;
  if (crossProduct(p_vec, Vector(s_pt, a[n])) >= 0) return 0;
  int l = 1, r = n - 1, mid = 0;
  while (l < r) {
    mid = (l + r + 1) >> 1;
    if (crossProduct(p_vec, Vector(s_pt, a[mid])) >= 0)
      l = mid;
    else
      r = mid - 1;
  }
  a[l].err();
  return (crossProduct(Vector(a[l], a[l + 1]), Vector(a[l], p)) < 0);
}
Point b[maxn];
int main() {
  scanf("%d", &n);
  for (int i = int(1); i <= int(n); ++i) {
    scanf("%I64d %I64d", &a[i].x, &a[i].y);
    s_pt = min(s_pt, a[i]);
  }
  for (int i = int(1); i <= int(n); ++i) {
    if (s_pt == a[i]) {
      for (int j = int(1); j <= int(n); ++j) b[j] = a[(i + j - 1) % n + 1];
      for (int j = int(1); j <= int(n); ++j) a[j] = b[j];
      break;
    }
  }
  --n;
  scanf("%d", &q);
  for (int i = int(1); i <= int(q); ++i) {
    Point p(0, 0);
    scanf("%I64d %I64d", &p.x, &p.y);
    cerr << i << "\n";
    if (!in_polygon(p)) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  return 0;
}
