#include<stdio.h>
#include<string.h>
int max(int a,int b)
{
if(a>b)return a;
return b;
}
int min(int a,int b)
{
if(a<b)return a;
return b;
}
struct point
{
int x,y;
}q[100];
int mult(int x,int y,int x1,int y1)
{
return x*y1-y*x1;
}
int online(point a,point b,point c)
{
if(mult(a.x-b.x,a.y-b.y,c.x-b.x,c.y-b.y)==0&&
a.x>=min(b.x,c.x)&&a.x<=max(b.x,c.x)&&a.y>=min(b.y,c.y)&&a.y<=max(b.y,c.y))
return 1;
return 0;
}
int main()
{
int i,n,t,count,flag;
point a,b,c,d;
// scanf("%d",&t);
while(scanf("%d",&n),n)
{
flag=count=0;
scanf("%d%d",&a.x,&a.y);
b.x=-100; b.y=a.y;
for(i=0;i<n;i++)
scanf("%d%d",&q[i].x,&q[i].y);
for(i=0;i<n;i++)
{
c.x=q[i].x; c.y=q[i].y;
d.x=q[(i+1)%n].x; d.y=q[(i+1)%n].y;
if(online(a,c,d))
{flag=1; break;}
if(c.y!=d.y&&a.y>min(c.y,d.y)&&a.y<=max(c.y,d.y))
{
if(mult(a.x-d.x,a.y-d.y,c.x-d.x,c.y-d.y)*mult(b.x-d.x,b.y-d.y,c.x-d.x,c.y-d.y)<0)
count++;
}
}
if(count&1)flag=1;
if(flag)printf("Yes\n");
else printf("No\n");
}
return 0;
}