#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
struct Tpoint {
  int x, y;
} pnt[maxn];
int b[maxn];
int n, m, K, Q;
int ent[4], nent;
long long dent[4];
bool cmp(const Tpoint &a, const Tpoint &b) {
  if (a.x == b.x)
    return a.y < b.y;
  else
    return a.x < b.x;
}
int main() {
  int i, j, jj, h, lh, x;
  int l, r;
  long long dl, dr, dt;
  scanf("%d%d%d%d", &n, &m, &K, &Q);
  for (i = 0; i < K; ++i) scanf("%d%d", &pnt[i].x, &pnt[i].y);
  for (i = 0; i < Q; ++i) scanf("%d", b + i);
  sort(pnt, pnt + K, cmp);
  sort(b, b + Q);
  lh = 1;
  if (pnt[0].x > 1) {
    x = lower_bound(b, b + Q, 1) - b;
    nent = 1;
    ent[0] = b[x];
    dent[0] = b[x] - 1;
  } else {
    nent = 1;
    ent[0] = 1;
    dent[0] = 0;
  }
  long long ans = 0;
  for (i = 0; i < K; i = j) {
    for (j = i; j < K && pnt[j].x == pnt[i].x; ++j)
      ;
    l = pnt[i].y;
    r = pnt[j - 1].y;
    h = pnt[i].x;
    dl = -1;
    dr = -1;
    for (jj = 0; jj < nent; ++jj) {
      dt = dent[jj] + h - lh;
      if (ent[jj] < r)
        dt += r - ent[jj] + r - l;
      else
        dt += ent[jj] - l;
      if (dl == -1 || dt < dl) dl = dt;
      dt = dent[jj] + h - lh;
      if (ent[jj] > l)
        dt += ent[jj] - l + r - l;
      else
        dt += r - ent[jj];
      if (dr == -1 || dt < dr) dr = dt;
    }
    lh = h;
    if (j == K) ans = min(dl, dr);
    nent = 0;
    x = lower_bound(b, b + Q, l) - b;
    if (x > 0) {
      ent[nent] = b[x - 1];
      dent[nent] = dl + l - b[x - 1];
      ++nent;
    }
    if (x < Q) {
      ent[nent] = b[x];
      dent[nent] = dl + b[x] - l;
      ++nent;
    }
    x = lower_bound(b, b + Q, r) - b;
    if (x > 0) {
      ent[nent] = b[x - 1];
      dent[nent] = dr + r - b[x - 1];
      ++nent;
    }
    if (x < Q) {
      ent[nent] = b[x];
      dent[nent] = dr + b[x] - r;
      ++nent;
    }
  }
  cout << ans << endl;
  return 0;
}
