#include<bits/stdc++.h>
using namespace std;
typedef double db;
const db eps = 1e-12, pi = acos(-1);
int sign(db x) {return x < -eps ? -1 : x > eps;}
int cmp(db x, db y) {return sign(x - y);}
int intersect(db l1, db r1, db l2, db r2) {
if (l1 > r1) swap(l1, r1); if (l2 > r2) swap(l2, r2); return cmp(r1, l2) != -1 && cmp(r2, l1) != -1;
}
int inmid(db k1, db k2, db k3) {return sign(k1 - k3) * sign(k2 - k3) <= 0;}//k3 in [k1,k2]?1:0
struct Point {
db x, y;
Point operator + (const Point & a)const {return Point{a.x + x, a.y + y};}
Point operator - (const Point & a)const {return Point{x - a.x, y - a.y};}
Point operator * (db a) const {return Point{x * a, y * a};}
Point operator / (db a) const {return Point{x / a, y / a};}
int operator == (const Point & a) const {return cmp(x, a.x) == 0 && cmp(y, a.y) == 0;}
int getP() const {return sign(y) == 1 || (sign(y) == 0 && sign(x) == -1);}
void input() {scanf("%lf%lf", &x, &y);}
};
db cross(Point p1, Point p2) {return p1.x * p2.y - p1.y * p2.x;}
db cross(Point p0, Point p1, Point p2) {return cross(p1 - p0, p2 - p0);}
db dot(Point p1, Point p2) {return p1.x * p2.x + p1.y * p2.y;}
int inmid(Point k1, Point k2, Point k3) {return inmid(k1.x, k2.x, k3.x) && inmid(k1.y, k2.y, k3.y);}
compareangle(Point p1, Point p2) {//Polar Angle Sort
return p1.getP() < p2.getP() || (p1.getP() == p2.getP() && sign(cross(p1, p2)) > 0);
}
struct Line {
Point s, e;
void input() {scanf("%lf%lf%lf%lf", &s.x, &s.y, &e.x, &e.y);}
Point vec() {return e - s;}
db length() {return sqrt(dot(s - e, s - e));}
db length2() {return dot(s - e, s - e);}
};
int onS(Line l, Point p) {return inmid(l.s, l.e, p) && sign(cross(l.s - p, l.e - l.s)) == 0;}
bool checkLS(Line l1, Line l2) {
return sign(cross(l2.s, l1.s, l1.e)) * sign(cross(l2.e, l1.s, l1.e)) <= 0;
}
int checkSS(Line l1, Line l2) {
return intersect(l1.s.x, l1.e.x, l2.s.x, l2.e.x) && intersect(l1.s.y, l1.e.y, l2.s.y, l2.e.y) && checkLS(l1, l2) && checkLS(l2, l1);
}
Point project(Line l, Point p) {
return l.s + l.vec() * dot(p - l.s, l.vec()) / l.length2();
}
Point reflect(Line l, Point p) {
return project(l, p) * 2 - p;
}
Point getLL(Line l1, Line l2) {
db w1 = cross(l2.s, l1.s, l2.e), w2 = cross(l2.s, l2.e, l1.e); return (l1.s * w2 + l1.e * w1) / (w1 + w2);
}
db area(vector<Point> A) {
db ans = 0;
for (int i = 0; i < A.size(); i++) ans += cross(A[i], A[(i + 1) % A.size()]);
return ans / 2;
}
int contain(vector<Point>A, Point p) {//2:in 1:on 0:out
int ans = 0; A.push_back(A[0]);
for (int i = 1; i < A.size(); i++) {
Line l = {A[i - 1], A[i]};
if (onS(l, p)) return 1; if (cmp(l.s.y, l.e.y) > 0) swap(l.s, l.e);
if (cmp(l.s.y, p.y) >= 0 || cmp(l.e.y, p.y) < 0) continue;
if (sign(cross(l.e, l.s, p))<0)ans ^= 1;
}
return ans << 1;
}
int main() {
int n; while (cin >> n) {
vector<Point> A(n);
for (auto&i : A)i.input();
int Q; cin >> Q; while (Q--) {
Point x; x.input();
if (contain(A, x) > 0)cout << "Yes" << endl;
else cout << "No" << endl;
}
}
}