#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>

#define EPS	1.0e-10
#define MAX_CRYSTAL	32
#define rep(idx, max)	for(int idx = 0, idx##Max = max; idx < idx##Max; idx ++)

typedef struct _POINT
{
	int x, y;

	_POINT() {}
	_POINT(int _x, int _y) : x(_x), y(_y) {}
} POINT;

int g_crystalNum;
POINT	g_hero, g_devil;
POINT	g_crystals[MAX_CRYSTAL];

int	g_bSolved;
int	g_bReached[MAX_CRYSTAL];
int	g_reachedCount;

double Distance(const POINT &src1, const POINT &src2)
{
	double x = src1.x - src2.x;
	double y = src1.y - src2.y;
	return( ::sqrt(x * x + y * y) );
}

void Solve(const POINT &pt, const double time)
{
	//std::cout << time << std::endl;
	if (g_bSolved) { return; }

	if (g_reachedCount == g_crystalNum)
	{
		g_bSolved = true;
		return;
	}

	rep(n, g_crystalNum)
	{
		if (g_bReached[n]) { continue; }
		double r = time + ::Distance(pt, g_crystals[n]);	// Elapsed time of hero
//		if (r - ::Distance(g_devil, g_crystals[n]) > EPS) { return; }	// Could not reached (You are too late :P)
		if (::Distance(g_devil, g_crystals[n]) < r + EPS) { return; }	// Could not reached (You are too late :P)
	}

	rep(n, g_crystalNum)
	{
		if (g_bReached[n]) { continue; }

		g_bReached[n] = true;
		g_reachedCount++;
		::Solve(g_crystals[n], time + ::Distance(pt, g_crystals[n]));
		g_bReached[n] = false;
		g_reachedCount--;
	}
}

int main(int nArgs, char **lplpszArgs)
{
	while (std::cin >> g_crystalNum)
	{
		std::cin >> g_hero.x >> g_hero.y >> g_devil.x >> g_devil.y;
		if (g_crystalNum == 0) { break; }
		rep(i, g_crystalNum)
		{
			POINT &pt = g_crystals[i];
			std::cin >> pt.x >> pt.y;
		}

		//::printf("Hero: (%d, %d), Devil: (%d, %d)\n", g_hero.x, g_hero.y, g_devil.x, g_devil.y);

		g_bSolved = false;
		::memset(g_bReached, 0, sizeof(g_bReached));
		g_reachedCount = 0;
		::Solve(g_hero, 0);
		std::cout << (g_bSolved ? "YES" : "NO") << std::endl;
	}
}