#include <stdio.h>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

#define mmax(a,b) (a>b)?a:b
#define mmin(a,b) (a<b)?a:b

bool used[1002];
int dist[1002];
int n, m, count2;
double d1, d2;
int x[1002], y[1002];

double D(int a, int b)
{
	return sqrt( (double)(x[a] - x[b]) * (x[a] - x[b]) + (y[a] - y[b]) * (y[a] - y[b]) );
}

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

	scanf("%d%d%d%lf%lf", &count2, &n, &m, &d1, &d2);

	for(int i = 1; i <= count2; i++)
	{
		scanf("%d%d", &x[i], &y[i]);
	}

	for(int i = 1; i <= count2; i++)
	{
		if( i != n )
		{
			dist[i] = 100500;
		}
		else
		{
			dist[i] = 0;
		}
		used[i] = false;
	}

	while(1)
	{
		int index;
		bool found = false;
		int min;
		for(int i = 1; i <= count2; i++)
		{
			if( !used[i] && dist[i] != 100500 && (!found || min > dist[i] ) )
			{
				found = true;
				min = dist[i];
				index = i;
			}
		}

		if( !found )
		{
			break;
		}

		used[index] = true;

		for(int i = 1; i <= count2; i++)
		{
			if( D(i, index) <= d1 + d2 && !used[i] && dist[index] + 1 < dist[i] )
			{
				dist[i] = dist[index] + 1;
			}
		}
	}
	if( dist[m] == 100500 )
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d\n", dist[m]);
	}
	return 0;
}