#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-14;
set<pair<long long, long long> > polA, polB;
long long cross(const complex<long double> &p, const complex<long double> &q) {
  return (conj(p) * q).imag();
}
complex<long double> orig;
bool comp(const complex<long double> &a, const complex<long double> &b) {
  long double arg1 = (long double)arg(a - orig),
              arg2 = (long double)arg(b - orig);
  long double abs1 = (long double)abs(a - orig),
              abs2 = (long double)abs(b - orig);
  if (fabs(arg1 - arg2) < eps) {
    if (fabs(arg1 - 3.1415926535897932384626 / 2.0) < eps)
      return abs1 - abs2 > eps;
    return abs1 - abs2 < eps;
  } else
    return arg1 < arg2;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  int a, b;
  vector<complex<long double> > v;
  cin >> n;
  for (int i = 1; (1 > n ? i >= n : i <= n); (1 > n ? i-- : i++)) {
    cin >> a >> b;
    polA.insert({a, b});
    complex<long double> p(a, b);
    v.push_back(p);
  }
  cin >> m;
  for (int i = 1; (1 > m ? i >= m : i <= m); (1 > m ? i-- : i++)) {
    cin >> a >> b;
    if (polA.count({a, b})) {
      cout << "NO" << '\n';
      return 0;
    }
    complex<long double> p(a, b);
    v.push_back(p);
  }
  int ind = 0;
  for (int i = 1; (1 > v.size() - 1 ? i >= v.size() - 1 : i <= v.size() - 1);
       (1 > v.size() - 1 ? i-- : i++)) {
    if (v[i].real() < v[ind].real() or
        (v[i].real() == v[ind].real() and v[i].imag() < v[ind].imag()))
      ind = i;
  }
  orig = v[ind];
  swap(v[0], v[ind]);
  sort(v.begin() + 1, v.end(), comp);
  int s = 3;
  for (int i = 3; i < v.size(); i++) {
    while (s >= 3 and cross(v[s - 1] - v[s - 2], v[i] - v[s - 1]) < 0LL) {
      s--;
    }
    v[s] = v[i];
    s++;
  }
  if (n == s) {
    bool ok = 1;
    for (int i = 0; i < s and ok; i++) {
      ok = polA.count({v[i].real(), v[i].imag()});
    }
    if (ok) {
      cout << "YES" << '\n';
      return 0;
    }
  }
  cout << "NO" << '\n';
  return 0;
}
