#include <bits/stdc++.h>
using namespace std;
vector<int> pos[200010];
int id[200010][2];
int b[200010];
long long dp[200010][2];
int r[200010];
int main() {
  int n, m, k, q;
  scanf("%d%d%d%d", &n, &m, &k, &q);
  int mx = 0;
  while (k--) {
    int x, y;
    scanf("%d%d", &x, &y);
    pos[x].push_back(y);
    mx = max(mx, x);
  }
  pos[1].push_back(1);
  for (int i = 1; i <= n; i++) sort(pos[i].begin(), pos[i].end());
  for (int i = 1; i <= q; i++) scanf("%d", &b[i]);
  sort(b + 1, b + q + 1);
  for (int i = 1; i <= n; i++) {
    int sz = pos[i].size();
    if (!sz) continue;
    id[i][0] = pos[i][0];
    id[i][1] = pos[i][sz - 1];
  }
  int ct = 0;
  for (int i = 1; i <= n; i++) {
    if (id[i][0]) r[++ct] = i;
  }
  for (int i = ct; i >= 1; i--) {
    for (int j = 0; j < 2; j++) {
      int x = r[i];
      dp[i][j] = id[x][1] - id[x][0];
      if (i == ct) continue;
      int y = r[i + 1];
      int jj = j ^ 1;
      long long add = 0x3f3f3f3f3f3f3f3fLL;
      for (int k = 0; k < 2; k++) {
        int cx = id[x][jj], cy = id[y][k];
        if (cx > cy) swap(cx, cy);
        long long val = cy - cx;
        int ii = lower_bound(b + 1, b + q + 1, cx) - b;
        if (ii > q || b[ii] > cy) {
          long long ans = 0x3f3f3f3f3f3f3f3fLL;
          if (ii <= q) ans = min(ans, 2LL * (b[ii] - cy));
          if (ii > 1) ans = min(ans, 2LL * (cx - b[ii - 1]));
          val += ans;
        }
        add = min(add, val + dp[i + 1][k]);
      }
      dp[i][j] += add;
    }
  }
  printf("%I64d\n", dp[1][0] + mx - 1);
  return 0;
}
