#include <bits/stdc++.h>
using namespace std;
struct vector3d {
  double x, y, z;
  vector3d(double x1 = 0, double y1 = 0, double z1 = 0) {
    x = x1;
    y = y1;
    z = z1;
  }
  int scan() { return scanf("%lf %lf", &x, &y); }
  int scanint() { return scanf("%d %d %d", &x, &y, &z); }
  int scanLL() { return scanf("%lld %lld %lld", &x, &y, &z); }
  vector3d negate() {
    vector3d ret(-x, -y, -z);
    return ret;
  }
  double length() { return sqrt(x * x + y * y + z * z); }
  double sqrlength() { return x * x + y * y + z * z; }
  double length(vector3d b) {
    vector3d tem(x - b.x, y - b.y, z - b.z);
    return tem.length();
  }
  vector3d add(vector3d b) {
    vector3d ret(x + b.x, y + b.y, z + b.z);
    return ret;
  }
  vector3d substract(vector3d b) {
    vector3d ret(x - b.x, y - b.y, z - b.z);
    return ret;
  }
  double dot(vector3d b) { return x * b.x + y * b.y + z * b.z; }
  vector3d cross(vector3d b) {
    vector3d ret(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);
    return ret;
  }
  vector3d lengthtransform(double l) {
    double len = length();
    vector3d ret(x * l / len, y * l / len, z * l / len);
    return ret;
  }
};
struct vector2d {
  long long x, y;
  vector2d(long long x1 = 0, long long y1 = 0) {
    x = x1;
    y = y1;
  }
  vector2d negate() {
    vector2d ret(-x, -y);
    return ret;
  }
  int scan() { return scanf("%lf %lf", &x, &y); }
  int scanint() { return scanf("%d %d", &x, &y); }
  void scanLL() { cin >> x >> y; }
  long long length() { return sqrt(x * x + y * y); }
  long long sqrlength() { return x * x + y * y; }
  long long length(vector2d b) {
    vector2d tem(x - b.x, y - b.y);
    return tem.length();
  }
  long long angle() {
    long long ret = atan2(y, x);
    return ret;
  }
  long long angle(vector2d b) {
    long long ret = dot(b) / (length() * b.length());
    return acos(ret);
  }
  vector2d add(vector2d b) {
    vector2d ret(x + b.x, y + b.y);
    return ret;
  }
  vector2d substract(vector2d b) {
    vector2d ret(x - b.x, y - b.y);
    return ret;
  }
  long long dot(vector2d b) { return x * b.x + y * b.y; }
  long long cross(vector2d b) { return x * b.y - b.x * y; }
  vector3d cross3d(vector2d b) {
    vector3d ret(0, 0, x * b.y - b.x * y);
    return ret;
  }
  vector2d lengthtransform(long long l) {
    long long len = length();
    vector2d ret(x * l / len, y * l / len);
    return ret;
  }
  vector2d rotation(long long theta) {
    vector2d ret(x * cos(theta) - y * sin(theta),
                 x * sin(theta) + y * cos(theta));
    return ret;
  }
};
vector2d A[110000], B[100000];
vector2d tri[110000];
long long n, m;
bool chc(int ina, int inb) {
  vector2d a, tem;
  a = A[ina].substract(A[1]);
  tem = B[inb].substract(A[1]);
  long long c = a.cross(tem);
  if (c > 0) return false;
  if (c == 0 && ina == 2) return false;
  a = A[ina + 1].substract(A[ina]);
  tem = B[inb].substract(A[ina]);
  c = a.cross(tem);
  if (c >= 0) return false;
  a = A[1].substract(A[ina + 1]);
  tem = B[inb].substract(A[ina + 1]);
  c = a.cross(tem);
  if (c > 0) return false;
  if (c == 0 && (ina + 1) == n) return false;
  return true;
}
bool make(vector2d p, vector2d q) { return p.x * q.y >= q.x * p.y; }
bool bs(int st, int end, vector2d tar, int in) {
  if (st > end) return false;
  if (st == end) return chc(st + 1, in);
  int mid = (st + end) / 2;
  if (make(tri[mid], tar)) return bs(st, mid, tar, in);
  return bs(mid + 1, end, tar, in);
}
int main() {
  while (cin >> n) {
    int i, j;
    for (i = 1; i <= n; i++) A[i].scanLL();
    cin >> m;
    for (i = 1; i <= m; i++) B[i].scanLL();
    for (i = 3; i <= n; i++) {
      vector2d b = A[i].substract(A[1]);
      tri[i - 2] = b;
    }
    for (i = 1; i <= m; i++) {
      vector2d b = B[i].substract(A[1]);
      if (!bs(1, n - 2, b, i)) break;
    }
    if (i > m)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
  return 0;
}
