#include <bits/stdc++.h>
using namespace std;
inline int cmpd(double x) { return x > 1e-50 ? 1 : (x < -1e-50 ? -1 : 0); }
inline double sqr(double x) { return x * x; }
inline bool zero(double x) { return cmpd(x) == 0; }
int sgn(double x) { return x > 1e-50 ? 1 : (x < -1e-50 ? -1 : 0); }
struct Point {
  double x, y;
  Point() {}
  Point(const double &xx, const double &yy) : x(xx), y(yy) {}
  Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }
  Point operator+(const Point &a) const { return Point(x + a.x, y + a.y); }
  Point operator/(const double &w) const { return Point(x / w, y / w); }
  friend double dot(const Point &a, const Point &b) {
    return a.x * b.x + a.y * b.y;
  }
  friend double det(const Point &a, const Point &b) {
    return a.x * b.y - a.y * b.x;
  }
  void in() { scanf("%lf %lf", &x, &y); }
  void out() { printf("%.2f  %.2f\n", x, y); }
};
struct Poly {
  vector<Point> p;
  Poly() {}
  bool isContain(const Point &t) {
    int n = p.size();
    Point g = (p[0] + p[n / 3] + p[n * 2 / 3]) / 3.0;
    int r = n, l = 0;
    while (l + 1 < r) {
      int mid = (l + r) >> 1;
      int k = sgn(det(p[l] - g, p[mid] - g));
      int resl = sgn(det(p[l] - g, t - g));
      int resm = sgn(det(p[mid] - g, t - g));
      if (k < 0) {
        if (resl <= 0 && resm > 0) {
          r = mid;
        } else {
          l = mid;
        }
      } else {
        if (resl > 0 && resm <= 0) {
          l = mid;
        } else {
          r = mid;
        }
      }
    }
    r %= n;
    int z = sgn(det(p[r] - t, p[l] - t));
    if (z == 1) {
      return true;
    }
    return false;
  }
} A;
int n, m;
int main() {
  cin >> n;
  Point tt;
  for (int i = 0; i < n; i++) {
    tt.in();
    A.p.push_back(tt);
  }
  bool isInSide = true;
  cin >> m;
  for (int j = 0; j < m; j++) {
    tt.in();
    if (isInSide == true && !A.isContain(tt)) {
      isInSide = false;
    }
  }
  if (isInSide) {
    puts("YES");
  } else {
    puts("NO");
  }
  return 0;
}
