#include <bits/stdc++.h>
class point2D {
 public:
  long long x, y;
  point2D() {}
  point2D(long long x, long long y) : x(x), y(y) {}
  bool operator<(const point2D &other) const {
    return ((y == other.y) ? (x > other.x) : (y > other.y));
  }
};
point2D operator-(const point2D &u, const point2D &v) {
  return point2D(u.x - v.x, u.y - v.y);
}
long long det(const point2D &u, const point2D &v) {
  return u.x * v.y - v.x * u.y;
}
long long dir(const point2D &p, const point2D &u, const point2D &v) {
  return det(u - p, v - p);
}
bool contains(int n, point2D vertex, point2D polygon[]) {
  int l = 1, r = n - 1, m;
  while (l < r) {
    m = (l + r) / 2;
    if (dir(polygon[0], polygon[m], vertex) <= 0)
      r = m;
    else
      l = m + 1;
  }
  if (r == 1 || dir(polygon[0], polygon[n - 1], vertex) >= 0 ||
      dir(polygon[r], polygon[r - 1], vertex) >= 0)
    return 0;
  return 1;
}
int n, m;
point2D polygonA[100000], vertexB;
int main() {
  std::cin >> n;
  for (int i = n - 1; i >= 0; i--) {
    std::cin >> polygonA[i].x >> polygonA[i].y;
  }
  std::cin >> m;
  for (int i = 0; i < m; i++) {
    std::cin >> vertexB.x >> vertexB.y;
    if (!contains(n, vertexB, polygonA)) {
      std::cout << "NO" << std::endl;
      return 0;
    }
  }
  std::cout << "YES" << std::endl;
  return 0;
}
