#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
inline int dcmp(double first) {
  if (fabs(first) < eps)
    return 0;
  else
    return first < 0 ? -1 : 1;
}
struct Point {
  double first, second;
  Point(double first = 0, double second = 0) : first(first), second(second) {}
  void read() { scanf("%lf%lf", &first, &second); }
  void write() { printf("%lf %lf", first, second); }
  bool operator==(const Point& u) const {
    return dcmp(first - u.first) == 0 && dcmp(second - u.second) == 0;
  }
  bool operator!=(const Point& u) const { return !(*this == u); }
  bool operator<(const Point& u) const {
    return dcmp(first - u.first) < 0 ||
           (dcmp(first - u.first) == 0 && dcmp(second - u.second) < 0);
  }
  bool operator>(const Point& u) const { return u < *this; }
  bool operator<=(const Point& u) const { return *this < u || *this == u; }
  bool operator>=(const Point& u) const { return *this > u || *this == u; }
  Point operator+(const Point& u) {
    return Point(first + u.first, second + u.second);
  }
  Point operator-(const Point& u) {
    return Point(first - u.first, second - u.second);
  }
  Point operator*(const double u) { return Point(first * u, second * u); }
  Point operator/(const double u) { return Point(first / u, second / u); }
  double operator*(const Point& u) {
    return first * u.second - second * u.first;
  }
};
double getCross(Point a, Point b) {
  return a.first * b.second - a.second * b.first;
}
bool isPointInConvexPolygon(vector<Point>& poly, Point p) {
  int n = poly.size(), lo = 1, hi = poly.size() - 1;
  if (dcmp(getCross(poly[1] - poly[0], p - poly[0])) <= 0) return 0;
  if (dcmp(getCross(poly[n - 1] - poly[0], p - poly[0])) >= 0) return 0;
  while (hi - lo > 1) {
    int mid = (lo + hi) / 2;
    if (dcmp(getCross(poly[mid] - poly[0], p - poly[0])) > 0)
      lo = mid;
    else
      hi = mid;
  }
  return dcmp(getCross(poly[hi] - poly[lo], p - poly[lo])) > 0;
}
int main() {
  long long N, M;
  vector<Point> A, B;
  scanf("%lld", &N);
  A.resize(N);
  for (long long i = (0); i < (N); i++) A[i].read();
  scanf("%lld", &M);
  B.resize(M);
  for (long long i = (0); i < (M); i++) B[i].read();
  bool ans = true;
  reverse(A.begin(), A.end());
  for (long long i = (0); i < (M); i++) {
    ans &= isPointInConvexPolygon(A, B[i]);
  }
  if (ans)
    cout << "YES\n";
  else
    cout << "NO\n";
}
