#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int N = 2e5 + 10, M = 1e6 + 10, inf = 1e9 + 10;
const long long INF = 1e18 + 10, mod = 1e9 + 7;
const double eps = (1e-8), pi = (4 * atan(1.0));
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0)
    return -1;
  else
    return 1;
}
struct Point {
  double x, y;
  Point() {}
  Point(double _x, double _y) {
    x = _x;
    y = _y;
  }
  Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }
  double operator^(const Point &b) const { return x * b.y - y * b.x; }
  double operator*(const Point &b) const { return x * b.x + y * b.y; }
  void transXY(double B) {
    double tx = x, ty = y;
    x = tx * cos(B) - ty * sin(B);
    y = tx * sin(B) + ty * cos(B);
  }
  bool operator<(const Point p) const {
    if (x != p.x) return x < p.x;
    return y < p.y;
  }
};
struct Line {
  Point s, e;
  Line() {}
  Line(Point _s, Point _e) {
    s = _s;
    e = _e;
  }
  pair<int, Point> operator&(const Line &b) const {
    Point res = s;
    if (sgn((s - e) ^ (b.s - b.e)) == 0) {
      if (sgn((s - b.e) ^ (b.s - b.e)) == 0)
        return make_pair(0, res);
      else
        return make_pair(1, res);
    }
    double t = ((s - b.s) ^ (b.s - b.e)) / ((s - e) ^ (b.s - b.e));
    res.x += (e.x - s.x) * t;
    res.y += (e.y - s.y) * t;
    return make_pair(2, res);
  }
};
double dist(Point a, Point b) { return sqrt((a - b) * (a - b)); }
const int MAXN = 200010;
Point listt[MAXN];
int Stack[MAXN], top;
int convexhull(int n) {
  sort(listt, listt + n);
  int m = 0;
  for (int i = 0; i < n; i++) {
    while (m > 1 && sgn((listt[Stack[m - 1]] - listt[Stack[m - 2]]) ^
                        (listt[i] - listt[Stack[m - 2]])) < 0)
      m--;
    Stack[m++] = i;
  }
  int k = m;
  for (int i = n - 2; i >= 0; i--) {
    while (m > k && sgn((listt[Stack[m - 1]] - listt[Stack[m - 2]]) ^
                        (listt[i] - listt[Stack[m - 2]])) < 0)
      m--;
    Stack[m++] = i;
  }
  if (n > 1) m--;
  return m;
}
set<Point> s;
int n, m;
int FIND() {
  for (int i = 0; i < top; i++)
    if (s.find(listt[Stack[i]]) != s.end()) return 1;
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    double x, y;
    scanf("%lf%lf", &x, &y);
    listt[i] = Point(x, y);
  }
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    double x, y;
    scanf("%lf%lf", &x, &y);
    listt[i + n] = Point(x, y);
    s.insert(listt[i + n]);
  }
  top = convexhull(n + m);
  if (FIND())
    printf("NO\n");
  else
    printf("YES\n");
  return 0;
}
