#define loop(i,a,b) for(int i=a; i<b; ++i)
#define min(a,b) (a)<(b)?a:b;
#define max(a,b) (a)>(b)?a:b;
#define sqr(a) ((a)*(a))
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;
static const int MAX = 1050;
int n, s, f, m[MAX][MAX], w[MAX], qu[MAX], cur, last;
long double l;
double l1, l2; 

struct r
{
	int x, y;
};

r d[MAX];

long double dist ( int a, int b )
{
	return sqrt( (long double)(sqr( d[a].x - d[b].x )) + (long double)(sqr( d[a].y - d[b].y )) );
}

int main()
{
	freopen("input.txt","rt",stdin);
	freopen("output.txt","wt",stdout);

	scanf("%d%d%d%lf%lf", &n, &s, &f, &l1, &l2);
	loop(i,0,n)
	{
		scanf("%d%d", &d[i].x, &d[i].y);
	}
	--s;
	--f;
	l = l1 + l2;

	loop(i,0,n)
		loop(j,0,n)
			m[i][j] = dist(i,j) <= l + 2e-3 ? 1 : 0;

	loop(i,0,n)
		w[i]=0;

	qu[0]=s;
	w[s]=1;
	cur = 0;
	last = 0;
	do
	{
		loop(i,0,n)
			if ( w[i] == 0 && m[ qu[cur] ][ i ] == 1 )
			{
				w[i] = w[ qu[cur] ] + 1;
				++last;
				qu[last] = i;
			}
		++cur;
	}
	while ( cur <= last && w[f] == 0 );

	if ( w[f] != 0 )
		printf("%d", w[f] - 1);
	else
		printf("Impossible");

	printf("\n");
	return 0;
}