import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.math.*;


public class theater_sm_wrong extends Thread {
	class Point {
		int x, y;

		public Point(int x, int y) {
			this.x = x;
			this.y = y;
		}

		double dist(Point p) {
			return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
		}

	}

	Point p[];

	double[][][] d;

	double count(int mask, int start, int end) {
//		 System.err.print("count("+mask+" ,"+start+" ,"+end+") ");
//		System.err.println(d[mask][start][end]);
		if (d[mask][start][end] != Double.POSITIVE_INFINITY) {
			return d[mask][start][end];
		}
		if (start == end && mask == (1 << start)) {
			return d[mask][start][end] = 0.0;
		} else if (mask == ((1 << start) | (1 << end))) {
			return d[mask][start][end] = p[start].dist(p[end]);
		}
		double res = Double.POSITIVE_INFINITY;
		for (int i = 0; i < p.length; i++) {
			if (i != start && i != end && ((mask & (1 << i)) > 0)) {
				int m = mask ^ (1 << end);
				res = Math.min(res, count(m, start, i)+p[i].dist(p[end]));

			}
		}
//		if (res != Double.POSITIVE_INFINITY)
//			System.err.println("d[" + mask + "][" + start + "][" + end + "] = "
//					+ res);
		return d[mask][start][end] = res;
	}

	double calc(int from, int to, int mask, double speed) {
		if (mask == 0) {
			return Math.abs(from - to) / speed;
		}
		double best = Double.POSITIVE_INFINITY;
		for (int i = 0; i < p.length; i++) {
			for (int j = 0; j < p.length; j++) {
				best = Math.min(best, Math.abs(from - p[i].x)
						+ count(mask, i, j) + Math.abs(to - p[j].x));
			}
		}
		return best / speed;
	}

	void solve() throws NumberFormatException, IOException {
		nextInt();
//		int w = nextInt();
		int l = nextInt();
		int v1 = nextInt();
		int v2 = nextInt();
		int n = nextInt();
		p = new Point[n];
		for (int i = 0; i < p.length; i++) {
			p[i] = new Point(nextInt(), nextInt());
		}
		int m = nextInt();
		int on[] = new int[m];
		for (int i = 0; i < on.length; i++) {
			int mm = nextInt();
			for (int j = 0; j < mm; j++) {
				on[i] |= 1 << (nextInt() - 1);
			}
		}
		d = new double[1 << n][n][n];
		for (int i = 0; i < d.length; i++) {
			for (int j = 0; j < d[0].length; j++) {
				Arrays.fill(d[i][j], Double.POSITIVE_INFINITY);
			}
		}
		double b[][][] = new double[m][2][2];
		b[0][0][0] = b[0][1][0] = b[0][1][0] = Double.POSITIVE_INFINITY;
		for (int it = 1; it < m; it++) {
			int lon = on[it] & (~on[it - 1]);
			int loff = (~on[it]) & on[it - 1];
//			System.err.println(BigInteger.valueOf(~on[it]).toString(2) +" "+ BigInteger.valueOf(on[it-1]).toString(2));
//			System.err.println(it + " " + lon + "("+BigInteger.valueOf(lon).toString(2)+") " + loff+" ("+BigInteger.valueOf(loff).toString(2)+")");
			for (int i = 0; i < 2; i++) {
				for (int j = 0; j < 2; j++) {
					// count b[it][i][j]
					b[it][i][j] = Double.POSITIVE_INFINITY;
					for (int onf = 0; onf < 2; onf++) {
						for (int offf = 0; offf < 2; offf++) {
							b[it][i][j] = Math.min(b[it][i][j],
									b[it - 1][onf][offf]
							    + Math.max(calc(l * onf, l * i,	lon, v1), 
								calc(l * offf, l * j, loff, v2)));
						}
					}
//					System.err.println("b["+it+"]["+i+"]["+j+"] = "+b[it][i][j]);
				}
			}
		}
		double ans = Double.POSITIVE_INFINITY;
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 2; j++) {
				ans = Math.min(ans, b[m - 1][i][j]);
			}
		}
//		System.err.println(ans);
		out.println(ans);

	}

	StringTokenizer st;

	int nextInt() throws IOException {
		while (st == null || !st.hasMoreElements()) {
			st = new StringTokenizer(in.readLine());
		}
		return Integer.parseInt(st.nextToken());
	}

	void myAssert(boolean b) {
		if (!b)
			throw new AssertionError();
	}

	BufferedReader in;

	PrintWriter out;

	public void run() {
		try {
			in = new BufferedReader(new FileReader("theater.in"));
			out = new PrintWriter(new FileWriter("theater.out"));
			solve();
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	public static void main(String[] args) {
		new theater_sm_wrong().start();
	}

}
