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

public class crimescene_vd_wa42 {

	void solve() throws IOException {
		int n = nextInt();
		long l = nextLong();
		int k = nextInt();
		boolean[] remove = new boolean[n];
		for (int i = 0; i < k; i++) {
			remove[nextInt() - 1] = true;
		}
		double[] x = new double[n + 1];
		double[] y = new double[n + 1];
		for (int i = 0; i < n; i++) {
			x[i] = nextDouble();
			y[i] = nextDouble();
		}
		x[n] = x[0];
		y[n] = y[0];
		double[] sides = new double[2 * n];
		double min = Long.MAX_VALUE;
		for (int i = 0; i < n; i++) {
			sides[i] = Math.sqrt((x[i] - x[i + 1]) * (x[i] - x[i + 1])
					+ (y[i] - y[i + 1]) * (y[i] - y[i + 1]));
			sides[i + n] = sides[i];
			min = Math.min(sides[i], min);
		}
		System.err.println(min);
		double[] prefix = new double[2 * n + 1];
		for (int i = 1; i <= 2 * n; i++) {
			if (remove[(i - 1) % n]) {
				prefix[i] = sides[i - 1] + prefix[i - 1];
			} else {
				prefix[i] = prefix[i - 1];
			}
		}
		double[] sumsides = new double[2 * n + 1];
		for (int i = 1; i <= 2 * n; i++) {
			sumsides[i] = sumsides[i - 1] + sides[i - 1];
		}
		if (sumsides[n] < l + 1e-10) {
			out.println(0);
			return;
		}
		if (l == 0) {
			out.println(prefix[n]);
			return;
		}
		double res = 0;
		int right = 0;
		double sum = 0;
		for (int i = 0; i < n; i++) {
			while (sum < l - 1e-10) {
				sum += sides[right++];
			}
			right--;
			sum -= sides[right];
			double curres = prefix[right] - prefix[i];
			if (remove[right % n]) {
				curres = curres + l - (sumsides[right] - sumsides[i]);
			}
			res = Math.max(res, curres);
			sum -= sides[i];
		}
		out.println(prefix[n] - res);
	}

	void run() throws IOException {
		in = new BufferedReader(new FileReader("crimescene.in"));
		out = new PrintWriter("crimescene.out");
		solve();
		out.close();
	}

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

	BufferedReader in;
	StringTokenizer st;
	PrintWriter out;

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

	int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

}
