#include <bits/stdc++.h>
using namespace std;
void ControlIO();
void TimerStart();
void TimerStop();
template <typename Arg1>
void ZZ(const char *name, Arg1 &&arg1) {
  std::cerr << name << " = " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void ZZ(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  std::cerr.write(names, comma - names) << " = " << arg1;
  ZZ(comma, args...);
}
const long long mod = 1000000007;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
bool cmp(complex<int> a, complex<int> b) {
  if (real(a) == real(b)) return imag(a) < imag(b);
  return real(a) < real(b);
}
long long cross(complex<int> o, complex<int> a, complex<int> b) {
  a = a - o;
  b = b - o;
  return (long long)real(a) * imag(b) - (long long)imag(a) * real(b);
}
void PrintPolygon(vector<complex<int> > P) {
  return;
  cout << "Polygon Details: ";
  for (auto x : P) cout << x << ' ';
  cout << '\n';
}
void PrintPolygon(vector<complex<int> > P, int n, string msg = "") {
  return;
  P.resize(n);
  cout << "Polygon Details: " << msg << ' ';
  for (auto x : P) cout << x << ' ';
  cout << '\n';
}
vector<complex<int> > convexHull(vector<complex<int> > Input) {
  int k = 0, n = Input.size();
  if (n <= 1) return Input;
  vector<complex<int> > H(2 * n);
  sort(Input.begin(), Input.end(), cmp);
  for (int i = 0; i < n; ++i) {
    while (k >= 2 && cross(H[k - 2], H[k - 1], Input[i]) < 0) k--;
    H[k++] = Input[i];
  }
  int t = k + 1;
  for (int i = n - 1; i > 0; --i) {
    while (k >= t && cross(H[k - 2], H[k - 1], Input[i - 1]) < 0) k--;
    H[k++] = Input[i - 1];
  }
  H.resize(k - 1);
  return H;
}
void solve() {
  int n, m, x, y;
  cin >> n;
  vector<complex<int> > Convex, Arbitary;
  for (int i = 0; i < n; ++i) {
    cin >> x >> y;
    Convex.push_back(complex<int>(x, y));
  }
  Arbitary = Convex;
  cin >> m;
  for (int i = 0; i < m; ++i) {
    cin >> x >> y;
    Arbitary.push_back(complex<int>(x, y));
  }
  Convex = convexHull(Convex);
  vector<complex<int> > HullAfterAddingArbitaryPoints = convexHull(Arbitary);
  PrintPolygon(Convex);
  PrintPolygon(HullAfterAddingArbitaryPoints);
  if (Convex.size() == HullAfterAddingArbitaryPoints.size()) {
    for (int i = 0; i < n; ++i)
      if (Convex[i] != HullAfterAddingArbitaryPoints[i]) {
        cout << "NO\n";
        return;
      }
    cout << "YES\n";
  } else
    cout << "NO\n";
}
int main() {
  ControlIO();
  int t = 1;
  TimerStart();
  while (t--) solve();
  TimerStop();
  return 0;
}
void ControlIO() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
}
auto TimeStart = chrono::steady_clock::now();
auto TimeEnd = chrono::steady_clock::now();
void TimerStart() {}
void TimerStop() {}
