#include<stdio.h>#include<vector>#include<math.h>#include<memory.h>#define MAXN 50*50using namespace std;struct Point {double x, y;} p[55], q[55];int n, m, i, j, K;double t1, t2, V;double d[55][55];double dist(Point a, Point b) {return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));}int mat[MAXN], tmat[MAXN];int g[50 * 50 + 10][55];int N, M;int hungry_aug(int i) {int v, j;for (j = 0; j < M; j++)if (g[i][j] && tmat[j] == 0) {tmat[j] = 1;v = mat[j];mat[j] = i;if (v == -1 || hungry_aug(v))return 1;mat[j] = v;}return 0;}int hungry() {int i, k = 0;memset(mat, -1, sizeof(mat));for (i = 0; i < N; i++) {memset(tmat, 0, sizeof(tmat));k += hungry_aug(i);}return k;}int main() {while (scanf("%d%d%lf%lf%lf", &n, &m, &t1, &t2, &V) != EOF) {t1 /= 60;for (i = 1; i <= m; i++) {scanf("%lf%lf", &q[i].x, &q[i].y);}for (i = 1; i <= n; i++) {scanf("%lf%lf", &p[i].x, &p[i].y);}for (i = 1; i <= n; i++)for (j = 1; j <= m; j++)d[i][j] = dist(p[i], q[j]) / V;double l = 0, r = 100000, mid;int tim = 50;while (tim--) {mid = (l + r) * 0.5;memset(g, 0, sizeof(g));for (i = 1; i <= n; i++)for (j = 1; j <= m; j++)for (K = 0; K < m; K++) {if (K * (t1 + t2) + t1 + d[i][j] <= mid) {g[(i - 1) * m + K + 1-1][j-1] = 1;}}N = n * m;M = m;int res = hungry();if (res >= m) {r = mid;} elsel = mid;}printf("%.6lfn", mid);}return 0;}


