#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct point2d {
  T x, y;
  point2d() {}
  point2d(T x, T y) : x(x), y(y) {}
  point2d &operator+=(const point2d &t) {
    x += t.x;
    y += t.y;
    return *this;
  }
  point2d &operator-=(const point2d &t) {
    x -= t.x;
    y -= t.y;
    return *this;
  }
  point2d &operator*=(T t) {
    x *= t;
    y *= t;
    return *this;
  }
  point2d &operator/=(T t) {
    x /= t;
    y /= t;
    return *this;
  }
  bool operator==(const point2d &t) { return (x == t.x) && (y == t.y); }
  point2d operator+(const point2d &t) const { return point2d(*this) += t; }
  point2d operator-(const point2d &t) const { return point2d(*this) -= t; }
  point2d operator*(T t) const { return point2d(*this) *= t; }
  point2d operator/(T t) const { return point2d(*this) /= t; }
};
template <typename T>
T dot(point2d<T> a, point2d<T> b) {
  return a.x * b.x + a.y * b.y;
}
template <typename T>
T norm(point2d<T> a) {
  return dot(a, a);
}
template <typename T>
long double abs(point2d<T> a) {
  return sqrt(norm(a));
}
template <typename T>
long double proj(point2d<T> a, point2d<T> b) {
  return dot(a, b) / abs(b);
}
template <typename T>
long double angle(point2d<T> a, point2d<T> b) {
  return acos(dot(a, b) / abs(a) / abs(b));
}
template <typename T>
long double angledeg(point2d<T> a, point2d<T> b) {
  long double ang = acos(dot(a, b) / abs(a) / abs(b));
  ang *= 180 / 3.1415926535897L;
  if (ang > 180) ang -= 360;
  return ang;
}
template <typename T>
T cross(point2d<T> a, point2d<T> b) {
  return a.x * b.y - a.y * b.x;
}
template <typename T>
T cross_diff(point2d<T> a, point2d<T> b, point2d<T> c) {
  return cross(b - a, c - a);
}
template <typename T>
T sqdist(point2d<T> a, point2d<T> b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
template <typename T, typename U>
long double dist(point2d<T> a, point2d<U> b) {
  return sqrtl((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
bool lexComp(const point2d<long long> &l, const point2d<long long> &r) {
  return l.x < r.x || (l.x == r.x && l.y < r.y);
}
int sgn(long long val) { return val > 0 ? 1 : (val == 0 ? 0 : -1); }
vector<point2d<long long>> seq;
int n;
bool pointInTriangle(point2d<long long> a, point2d<long long> b,
                     point2d<long long> c, point2d<long long> point) {
  long long s1 = abs(cross_diff(a, b, c));
  long long s2 = abs(cross_diff(point, a, b)) + abs(cross_diff(point, b, c)) +
                 abs(cross_diff(point, c, a));
  if (abs(cross_diff(point, a, b)) == 0) return 0;
  return s1 == s2;
}
void prepare(vector<point2d<long long>> &points) {
  n = points.size();
  int pos = 0;
  for (int i = 1; i < n; i++) {
    if (lexComp(points[i], points[pos])) pos = i;
  }
  rotate(points.begin(), points.begin() + pos, points.end());
  n--;
  seq.resize(n);
  for (int i = 0; i < n; i++) seq[i] = points[i + 1] - points[0];
}
bool pointInConvexPolygon(point2d<long long> point) {
  if (cross(seq[0], point) != 0 &&
      sgn(cross(seq[0], point)) != sgn(cross(seq[0], seq[n - 1])))
    return false;
  if (cross(seq[n - 1], point) != 0 &&
      sgn(cross(seq[n - 1], point)) != sgn(cross(seq[n - 1], seq[0])))
    return false;
  if (cross(seq[0], point) == 0) return false;
  if (cross(seq[n - 1], point) == 0) return false;
  int l = 0, r = n - 1;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int pos = mid;
    if (cross(seq[pos], point) >= 0)
      l = mid;
    else
      r = mid;
  }
  int pos = l;
  return pointInTriangle(seq[pos], seq[pos + 1], point2d<long long>(0, 0),
                         point);
}
int main() {
  long long(n);
  scanf("%lld", &(n));
  ;
  vector<point2d<long long>> A(n);
  set<pair<long long, long long>> seta;
  for (long long i = 0; i < (n); i++) {
    long long(a), (b);
    scanf("%lld%lld", &(a), &(b));
    ;
    A[i] = point2d<long long>(a, b);
    seta.insert({a, b});
  }
  reverse((A).begin(), (A).end());
  bool f = 0;
  long long(m);
  scanf("%lld", &(m));
  ;
  vector<point2d<long long>> B(m);
  for (long long i = 0; i < (m); i++) {
    long long(a), (b);
    scanf("%lld%lld", &(a), &(b));
    ;
    B[i] = point2d<long long>(a, b);
    if (seta.count({a, b})) f = 1;
  }
  if (f) {
    printf("NO\n");
    return 0;
  }
  prepare(A);
  for (long long i = 0; i < (m); i++) {
    if (!pointInConvexPolygon(B[i] - A[0])) {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  return 0;
}
