#include <iostream>
#include <cstdio>
#include <string>
#include <set>
#include <vector>
#include <algorithm>
#include <map>
#include <math.h>
#include <queue>

using namespace std;

double dist(int x1, int y1,  int x2,int y2)
{
	return sqrt(double((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
	//cout <<  "!" <<sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) << "!";
}

int main()
{
	freopen("input.txt", "rt", stdin);
	freopen("output.txt", "wt", stdout);
	
	int n, start, finish;
	double d1, d2;
	cin >> n >> start >> finish >> d1 >> d2;
	
	vector<pair<int, int > > ros(n);
	for(int i=0; i<n ;i++)
		cin >> ros[i].first >> ros[i].second;
	
	vector<vector<float> > mask(n, vector<float>(n, -1.00));
	vector<vector<bool> > bmask(n, vector<bool>(n, false));
	for(int i=0;i<n; i++)
		for(int j=0; j<n; j++)
			if(i != j)
			{
				mask[i][j]=dist(ros[i].first, ros[i].second, ros[j].first, ros[j].second);
				//cout << dist(ros[i].first, ros[i].second, ros[j].first, ros[j].second) << " ";
			}

			ros.clear();
	/*for(int i=0;i<n; i++)
	{
		
		for(int j=0; j<n; j++)
		{
			cout.setf(ios::fixed|ios::showpoint);
			cout.precision(3);
			cout.width(4);
			cout << mask[i][j].first << " ";
			
		}
		cout << "\n";
	}*/
	queue<int> q;
	start--; finish--;
	q.push(start);
	//cout << start <<"#";
	int count=0;
	//bool f=false, flag= false;
	bool flag=false;
	while(!q.empty())
	{
		int top=q.front();
		q.pop();
	//	cout << top <<"#";
		//cout << top << " ";
		if(top==finish)
		{
			flag=true;
			break;
		}
		count++;

		/*if(f)
			D=d2;//первая розетка занята
		else D=d1;//вторая занята*/
		
		
		for(int i=0;i<n; i++)
			if(i!=top && !bmask[top][i] && (mask[top][i]- (d1+d2)) < 0.0001)
			{
				//cout << mask[top][i].first <<"!" << top << "!" << i<< "!";
				q.push(i);
				bmask[top][i]=true;
				bmask[i][top]=true;
			}
			//cout << "X"; 		
		//f= !f;
	}
	//cout << "!";
	if(flag)
		cout << count;
	else cout << "Impossible";
	return 0;
}
