#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  char t;
  Point() {}
  Point(long long x, long long y, char t = '#') : x(x), y(y), t(t) {}
  bool operator<(const Point& p) const { return x == p.x ? y < p.y : x < p.x; }
  bool operator>(const Point& p) const { return x == p.x ? y > p.y : x > p.x; }
  Point operator-(const Point& p) const { return Point(x - p.x, y - p.y); }
};
int signum(long long x) { return x ? x / abs(x) : 0; }
long long cross(Point a, Point b) { return a.x * b.y - b.x * a.y; }
int ccw(Point a, Point b, Point c) { return signum(cross(b - a, c - a)); }
ostream& operator<<(ostream& os, const Point& p) {
  return os << '(' << p.x << ',' << p.y << ',' << p.t << ')';
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& a) {
  os << '[';
  for (int i = int(0); i < int(a.size()); i++) os << (i ? " " : "") << a[i];
  return os << ']';
}
int main() {
  for (int n, m; cin >> n && n;) {
    vector<Point> ps;
    for (int i = int(0); i < int(n); i++) {
      int x, y;
      cin >> x >> y;
      ps.emplace_back(x, y, 'A');
    }
    cin >> m;
    for (int i = int(0); i < int(m); i++) {
      int x, y;
      cin >> x >> y;
      ps.emplace_back(x, y, 'B');
    }
    sort(begin(ps), end(ps));
    vector<Point> cs;
    for (int i = int(0); i < int(n + m); i++) {
      while (cs.size() >= 2 &&
             ccw(cs[cs.size() - 2], cs[cs.size() - 1], ps[i]) < 0)
        cs.pop_back();
      cs.push_back(ps[i]);
    }
    for (int i = int(n + m); i-- > int(0);) {
      while (cs.size() >= 2 &&
             ccw(cs[cs.size() - 2], cs[cs.size() - 1], ps[i]) < 0)
        cs.pop_back();
      cs.push_back(ps[i]);
    }
    cout << (none_of(begin(cs), end(cs), [](Point p) { return p.t == 'B'; })
                 ? "YES"
                 : "NO")
         << endl;
  }
  return 0;
}
