#include <fstream>
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
#define F cin
#define G cout
//ifstream F("p.in");
//ofstream G("p.out");
/**
In loc sa ne plimbam cu nava printre obstacole , vom mari obstacolele si nava va deveni
punctiforma. Acum pentru oricare 2 obstacole care se intersecteaza o sa trasam o muchie
intre ele. O sa rezulte un graf planar si un punct initial.
Ca sa vedem daca punctul initial se afla in interiorul unui poligon trebuie sa determinam
un ciclu care sa inconjoare punctul. Daca mergem pe un astfel de ciclu un sens trigonometric
unghiul cu care mergem va creste constant. Astfel o sa facem un Bellman-Ford pe graf in care
o sa cautam un ciclu negativ. Muchiile grafului vor fi unghiul facut de o latura fata de punctul
de referinta.
*/
const int Nmax = 310;
const double EPS = 1e-10;
struct point
{
double x,y;
};
point operator - ( point a, point b )
{
point c;
c.x = a.x - b.x;
c.y = a.y - b.y;
return c;
}
point points[Nmax];
double range[Nmax],act[Nmax];
double angle[Nmax][Nmax];
bool mark[Nmax][Nmax];
int N,in[Nmax],times[Nmax];
queue<int> Q;
int sign(double x)
{
return x < -EPS ? -1 : x > EPS;
}
double cross(point a,point b)
{
return a.x * b.y - a.y * b.x;
}
double dot(point a,point b)
{
return a.x * b.x + a.y * b.y;
}
double ang(point a,point b)
{
return atan2( cross(a,b) , dot(a,b) );
}
double sqr(double x)
{
return x*x;
}
double dist(point a,point b)
{
return sqrt( sqr(a.x-b.x) + sqr(a.y-b.y) );
}
void build_graph()
{
for (int i=0;i<N;++i)
for (int j=0;j<N;++j)
if ( i != j )
if ( sign( range[i] + range[j] + range[N] * 2.0 - dist(points[i],points[j]) ) == 1 )
{
mark[i][j] = 1;
angle[i][j] = ang(points[i]-points[N],points[j]-points[N]);
}
}
int main()
{
F>>N;
for (int i=0;i<=N;++i)
{
F>>points[i].x>>points[i].y;
F>>range[i];
}
build_graph();
for (int i=0;i<N;++i)
{
Q.push( i );
in[i] = 1;
act[i] = 0.0;
}
while ( Q.size() )
{
int i = Q.front();
Q.pop(), in[i] = 0;
for (int j=0;j<N;++j)
if ( mark[i][j] && sign( act[i] + angle[i][j] - act[j] ) < 0 )
{
act[j] = act[i] + angle[i][j];
if ( in[j] == 0 ) Q.push( j ), in[j] = 1;
if ( ++times[j] > N )
{
G<<"NO\n";
return 0;
}
}
}
G<<"YES\n";
}
I2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIEYgY2luCiNkZWZpbmUgRyBjb3V0CgovL2lmc3RyZWFtIEYoInAuaW4iKTsKLy9vZnN0cmVhbSBHKCJwLm91dCIpOwoKLyoqCgpJbiBsb2Mgc2EgbmUgcGxpbWJhbSBjdSBuYXZhIHByaW50cmUgb2JzdGFjb2xlICwgdm9tIG1hcmkgb2JzdGFjb2xlbGUgc2kgbmF2YSB2YSBkZXZlbmkKcHVuY3RpZm9ybWEuIEFjdW0gcGVudHJ1IG9yaWNhcmUgMiBvYnN0YWNvbGUgY2FyZSBzZSBpbnRlcnNlY3RlYXphIG8gc2EgdHJhc2FtIG8gbXVjaGllCmludHJlIGVsZS4gTyBzYSByZXp1bHRlIHVuIGdyYWYgcGxhbmFyIHNpIHVuIHB1bmN0IGluaXRpYWwuCgpDYSBzYSB2ZWRlbSBkYWNhIHB1bmN0dWwgaW5pdGlhbCBzZSBhZmxhIGluIGludGVyaW9ydWwgdW51aSBwb2xpZ29uIHRyZWJ1aWUgc2EgZGV0ZXJtaW5hbQp1biBjaWNsdSBjYXJlIHNhIGluY29uam9hcmUgcHVuY3R1bC4gRGFjYSBtZXJnZW0gcGUgdW4gYXN0ZmVsIGRlIGNpY2x1IHVuIHNlbnMgdHJpZ29ub21ldHJpYwp1bmdoaXVsIGN1IGNhcmUgbWVyZ2VtIHZhIGNyZXN0ZSBjb25zdGFudC4gQXN0ZmVsIG8gc2EgZmFjZW0gdW4gQmVsbG1hbi1Gb3JkIHBlIGdyYWYgaW4gY2FyZQpvIHNhIGNhdXRhbSB1biBjaWNsdSBuZWdhdGl2LiBNdWNoaWlsZSBncmFmdWx1aSB2b3IgZmkgdW5naGl1bCBmYWN1dCBkZSBvIGxhdHVyYSBmYXRhIGRlIHB1bmN0dWwKZGUgcmVmZXJpbnRhLgoKKi8KCmNvbnN0IGludCBObWF4ID0gMzEwOwpjb25zdCBkb3VibGUgRVBTID0gMWUtMTA7CgpzdHJ1Y3QgcG9pbnQKewogICAgZG91YmxlIHgseTsKfTsKCnBvaW50IG9wZXJhdG9yIC0gKCBwb2ludCBhLCBwb2ludCBiICkKewogICAgcG9pbnQgYzsKICAgIGMueCA9IGEueCAtIGIueDsKICAgIGMueSA9IGEueSAtIGIueTsKICAgIHJldHVybiBjOwp9Cgpwb2ludCBwb2ludHNbTm1heF07CmRvdWJsZSByYW5nZVtObWF4XSxhY3RbTm1heF07CmRvdWJsZSBhbmdsZVtObWF4XVtObWF4XTsKYm9vbCBtYXJrW05tYXhdW05tYXhdOwppbnQgTixpbltObWF4XSx0aW1lc1tObWF4XTsKcXVldWU8aW50PiBROwoKaW50IHNpZ24oZG91YmxlIHgpCnsKICAgIHJldHVybiB4IDwgLUVQUyA/IC0xIDogeCA+IEVQUzsKfQoKZG91YmxlIGNyb3NzKHBvaW50IGEscG9pbnQgYikKewogICAgcmV0dXJuIGEueCAqIGIueSAtIGEueSAqIGIueDsKfQoKZG91YmxlIGRvdChwb2ludCBhLHBvaW50IGIpCnsKICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7Cn0KCmRvdWJsZSBhbmcocG9pbnQgYSxwb2ludCBiKQp7CiAgICByZXR1cm4gYXRhbjIoIGNyb3NzKGEsYikgLCBkb3QoYSxiKSApOwp9Cgpkb3VibGUgc3FyKGRvdWJsZSB4KQp7CiAgICByZXR1cm4geCp4Owp9Cgpkb3VibGUgZGlzdChwb2ludCBhLHBvaW50IGIpCnsKICAgIHJldHVybiBzcXJ0KCBzcXIoYS54LWIueCkgKyBzcXIoYS55LWIueSkgKTsKfQoKdm9pZCBidWlsZF9ncmFwaCgpCnsKICAgIGZvciAoaW50IGk9MDtpPE47KytpKQogICAgICAgIGZvciAoaW50IGo9MDtqPE47KytqKQogICAgICAgICAgICBpZiAoIGkgIT0gaiApCiAgICAgICAgICAgICAgICBpZiAoIHNpZ24oIHJhbmdlW2ldICsgcmFuZ2Vbal0gKyByYW5nZVtOXSAqIDIuMCAtIGRpc3QocG9pbnRzW2ldLHBvaW50c1tqXSkgKSA9PSAxICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtYXJrW2ldW2pdID0gMTsKICAgICAgICAgICAgICAgICAgICBhbmdsZVtpXVtqXSA9IGFuZyhwb2ludHNbaV0tcG9pbnRzW05dLHBvaW50c1tqXS1wb2ludHNbTl0pOwogICAgICAgICAgICAgICAgfQp9CgppbnQgbWFpbigpCnsKICAgIEY+Pk47CiAgICBmb3IgKGludCBpPTA7aTw9TjsrK2kpCiAgICB7CiAgICAgICAgRj4+cG9pbnRzW2ldLng+PnBvaW50c1tpXS55OwogICAgICAgIEY+PnJhbmdlW2ldOwogICAgfQogICAgYnVpbGRfZ3JhcGgoKTsKICAgIGZvciAoaW50IGk9MDtpPE47KytpKQogICAgewogICAgICAgIFEucHVzaCggaSApOwogICAgICAgIGluW2ldID0gMTsKICAgICAgICBhY3RbaV0gPSAwLjA7CiAgICB9CiAgICB3aGlsZSAoIFEuc2l6ZSgpICkKICAgIHsKICAgICAgICBpbnQgaSA9IFEuZnJvbnQoKTsKICAgICAgICBRLnBvcCgpLCBpbltpXSA9IDA7CiAgICAgICAgZm9yIChpbnQgaj0wO2o8TjsrK2opCiAgICAgICAgICAgIGlmICggbWFya1tpXVtqXSAmJiBzaWduKCBhY3RbaV0gKyBhbmdsZVtpXVtqXSAtIGFjdFtqXSApIDwgMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFjdFtqXSA9IGFjdFtpXSArIGFuZ2xlW2ldW2pdOwogICAgICAgICAgICAgICAgaWYgKCBpbltqXSA9PSAwICkgUS5wdXNoKCBqICksIGluW2pdID0gMTsKICAgICAgICAgICAgICAgIGlmICggKyt0aW1lc1tqXSA+IE4gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEc8PCJOT1xuIjsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgfQogICAgRzw8IllFU1xuIjsKfQo=