import std.stdio;
import std.ascii;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.random;
import std.regex;
import std.typecons;

void main() {
    int N, Hx, Hy, Dx, Dy;
    int[] Y, X;
    bool input() {
        scanf("%d %d %d %d %d\n", &N, &Hx, &Hy, &Dx, &Dy);
        if (N == 0) return false;
        Y = new int[N];
        X = new int[N];
        foreach (i; 0 .. N) {
            scanf("%d %d\n", &X[i], &Y[i]);
        }
        return true;
    }
    double Distance(double y1, double x1, double y2, double x2) {
        double dy = y1 - y2,
               dx = x1 - x2;
        return sqrt(dy * dy + dx * dx);
    }
    void solve() {
        static float[int] cache[22];
        cache.clear;
        bool dfs(int v, int used, float t) {
            //writefln("%d %0" ~ (N + 2).to!string ~ "b", v, used);
            if (used == (1 << N) - 1) return true;
            if (cache[v].get(used, cast(float)1e4) <= t) return false;
            cache[v][used] = t;
            foreach (i; 0 .. N) {
                if (used & (1 << i)) continue;
                if (Distance(Y[v], X[v], Y[i], X[i]) + t >= Distance(Dy, Dx, Y[i], X[i])) return false;
            }
            foreach (i; 0 .. N) {
                if (dfs(i, used | 1 << i, t + Distance(Y[v], X[v], Y[i], X[i]))) return true;
            }
            return false;
        }
        foreach (i; 0 .. N) {
            if (Distance(Hy, Hx, Y[i], X[i]) >= Distance(Y[i], X[i], Dy, Dx)) {
                writeln("NO"); return;
            }
        }
        foreach (i; 0 .. N) {
            if (dfs(i, 1 << i, Distance(Hy, Hx, Y[i], X[i]))) {
                writeln("YES"); return;
            }
        }
        writeln("NO");
    }
    while (input) solve;
}