import java.io.*;
import java.util.*;

public class crimescene_pk_n2_wa {

	void solve() throws IOException {
		int n = nextInt();
		double l = nextLong();
		long[] x = new long[n * 2];
		long[] y = new long[n * 2];
		boolean[] good = new boolean[n * 2];
		int k = nextInt();
		for (int i = 0; i < k; i++) {
			int t = nextInt() - 1;
			good[t] = true;
			good[n + t] = true;
		}
		for (int i = 0; i < n; i++) {
			x[i] = nextLong();
			x[i + n] = x[i];
			y[i] = nextLong();
			y[i + n] = y[i];
		}

		double sum = 0;
		for (int i = 0; i < n; i++) {
			if (good[i])
				sum += dist(x, y, i, i + 1);
		}

		double ans = sum;
		
		for (int i = 0; i < n; i++) {
			int j = i;
			double left = l;
			double res = 0;

			//here is bug
			while (left > 0 && j < n + n - 1) {
				if (good[j])
					res += Math.min(left, dist(x, y, j, j + 1));
				left -= Math.min(left, dist(x, y, j, j + 1));
				j++;
			}
			ans = Math.min(ans, sum - res);
		}
		
		out.println(ans);
	}

	private double dist(long[] x, long[] y, int j, int i) {
		return Math.sqrt(((double)x[i] - x[j]) * (x[i] - x[j]) + ((double)y[i] - y[j]) * (y[i] - y[j]));
	}

	BufferedReader br;
	StringTokenizer st;
	PrintWriter out;

	void run() {
		try {
			br = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(System.out);

			br = new BufferedReader(new FileReader(new File("crimescene.in")));
			out = new PrintWriter("crimescene.out");

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new crimescene_pk_n2_wa().run();
	}

	String nextToken() throws IOException {
		while ((st == null) || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	int nextInt() throws NumberFormatException, IOException {
		return Integer.parseInt(nextToken());
	}

	double nextDouble() throws NumberFormatException, IOException {
		return Double.parseDouble(nextToken());
	}

	long nextLong() throws NumberFormatException, IOException {
		return Long.parseLong(nextToken());
	}
}
