#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 = 1001;
int n, s, f, m[MAX][MAX], w[MAX], qu[MAX], cur, last;
double l1, l2, l;

struct r
{
	int x, y;
};

r d[MAX];

double dist ( int a, int b )
{
	return sqrt( 0.0 + sqr( d[a].x - d[b].x ) + 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;

	loop(i,0,n)
	l = l1 + l2;

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

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

	if ( w[f] )
		printf("%d\n", w[f] - 1);
	else
		printf("Impossible\n");

	printf("\n");

	return 0;
}