#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
const long long INF = 1000000000000010;
int n, m, k, q;
long long l[N], r[N], b[N];
int main() {
  scanf("%d%d%d%d", &n, &m, &k, &q);
  long long imax = -1;
  for (int i = 1; i <= n; i++) l[i] = INF, r[i] = 0;
  for (int i = 1; i <= k; i++) {
    long long x, y;
    scanf("%lld%lld", &x, &y);
    imax = max(imax, x);
    l[x] = min(l[x], y);
    r[x] = max(r[x], y);
  }
  for (int i = 1; i <= q; i++) scanf("%lld", &b[i]);
  sort(b + 1, b + q + 1);
  long long al = INF, ar = INF, L = l[1], R = r[1];
  if (0 == r[1]) {
    al = ar = 0;
    L = R = 1;
  } else {
    al = 2 * r[1] - l[1] - 1;
    ar = r[1] - 1;
  }
  for (int i = 2; i <= n; i++) {
    if (0 == r[i]) continue;
    int idxl = lower_bound(b + 1, b + q + 1, L) - b;
    int idxr = lower_bound(b + 1, b + q + 1, R) - b;
    long long LL = INF, LR = INF, RL = INF, RR = INF;
    if (idxl <= q) LR = b[idxl];
    if (idxl > 1) LL = b[idxl - 1];
    if (idxr <= q) RR = b[idxr];
    if (idxr > 1) RL = b[idxr - 1];
    long long tl = INF, tr = INF;
    tl = min(tl, al + abs(L - LL) + abs(LL - r[i]) + r[i] - l[i]);
    tl = min(tl, al + abs(L - LR) + abs(LR - r[i]) + r[i] - l[i]);
    tl = min(tl, ar + abs(R - RL) + abs(RL - r[i]) + r[i] - l[i]);
    tl = min(tl, ar + abs(R - RR) + abs(RR - r[i]) + r[i] - l[i]);
    tr = min(tr, al + abs(L - LL) + abs(LL - l[i]) + r[i] - l[i]);
    tr = min(tr, al + abs(L - LR) + abs(LR - l[i]) + r[i] - l[i]);
    tr = min(tr, ar + abs(R - RL) + abs(RL - l[i]) + r[i] - l[i]);
    tr = min(tr, ar + abs(R - RR) + abs(RR - l[i]) + r[i] - l[i]);
    al = tl, ar = tr;
    L = l[i], R = r[i];
  }
  printf("%lld\n", min(al, ar) + imax - 1);
  return 0;
}
