#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
long long gcd(long long x, long long y) {
  if (y == 0)
    return x;
  else
    return gcd(y, x % y);
}
long long ksm(long long a, long long b) {
  long long r = 1;
  while (b) {
    if (b & 1) r = (r * a) % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return r;
}
const int maxn = 2e5 + 100;
long long n, m, k, q, a[maxn][2], dp[maxn][2], b[maxn];
long long solve(int pre, int v, int now, int u) {
  long long ans = 1e9;
  int pos = lower_bound(b + 1, b + 1 + q, a[pre][v]) - b;
  if (pos <= q)
    ans = min(ans, abs(a[pre][v] - b[pos]) + abs(a[now][u ^ 1] - b[pos]) +
                       abs(a[now][u ^ 1] - a[now][u]));
  pos = upper_bound(b + 1, b + 1 + q, a[pre][v]) - b - 1;
  if (pos)
    ans = min(ans, abs(a[pre][v] - b[pos]) + abs(a[now][u ^ 1] - b[pos]) +
                       abs(a[now][u ^ 1] - a[now][u]));
  return ans;
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &m, &k, &q);
  for (int i = 1; i <= n; i++) a[i][0] = 1e9, a[i][1] = -1e9;
  memset(dp, inf, sizeof(dp));
  for (int i = 1; i <= k; i++) {
    long long x, y;
    scanf("%lld%lld", &x, &y);
    a[x][0] = min(a[x][0], y);
    a[x][1] = max(a[x][1], y);
  }
  a[1][0] = 1;
  a[1][1] = max(a[1][1], 1LL);
  for (int i = 1; i <= q; i++) scanf("%lld", &b[i]);
  sort(b + 1, b + 1 + q);
  dp[1][0] = abs(a[1][1] - 1) + abs(a[1][1] - a[1][0]);
  dp[1][1] = abs(a[1][1] - 1);
  long long pre = 1;
  for (int now = 2; now <= n; now++) {
    if (a[now][0] == 1e9) continue;
    for (int u = 0; u <= 1; u++)
      for (int v = 0; v <= 1; v++)
        dp[now][u] =
            min(dp[now][u], dp[pre][v] + solve(pre, v, now, u) + now - pre);
    pre = now;
  }
  printf("%lld\n", min(dp[pre][0], dp[pre][1]));
}
