// 
#pragma comment(linker, "/STACK:16777215")
#include <cmath>
#include <cstring>
#include <ctime>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <deque>
#include <string>
using namespace std;

const int INF= 1000*1000;

struct T {
	int x;
	int y;
	int cost;
	bool used;
};


int n, bg, nd;
double d1, d2, rd;

vector<T> mas;

const bool conn(const int i, const int j)
{
	double dx= mas[i].x-mas[j].x;
	double dy= mas[i].y-mas[j].y;
	return dx*dx+dy*dy<=rd;
}

int main()
{
	int i, j, k, pt;
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	cin >> n >> bg >> nd >> d1 >> d2;
	rd= (d1+d2)*(d1+d2);
	mas.resize(n+1);
	for(i=1; i<=n; ++i)
	{
		cin >> mas[i].x >> mas[i]. y;
		mas[i].cost= INF;
		mas[i].used= false;
	}
	
 	mas[bg].cost= 0;
	while (true)
	{
		pt= -1;
		for(i=1; i<=n; ++i)
			if (!mas[i].used && (pt==-1 || mas[i].cost<mas[pt].cost))
				pt= i;
		if (pt==-1)
			break;
		mas[pt].used= true;
		for(i=1; i<=n; ++i)
			if (!mas[i].used && conn(pt, i) && mas[i].cost>mas[pt].cost+1)
				mas[i].cost= mas[pt].cost+1;
	}
	if (mas[nd].cost==INF)
		cout << "Impossible";
	else
		cout << mas[nd].cost;
 	return 0;
}