#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  int n, m, k, q, x, y, I, f = 2000000000, h = -1;
  cin >> n >> m >> k >> q;
  vector<int> V[n + 1];
  set<int> Se, SeL;
  set<int>::iterator it;
  int G[m + 1];
  long long LL[n + 2], LR[n + 2], RL[n + 2], RR[n + 2], Dl, Dr,
      DM = 2000000000000000000, d, ILL = 1, IRR = 1, ILR = 1, IRL = 1, Il, Ir,
      M = 2000000000;
  for (int i = 0; i < k; i++) {
    cin >> y >> x;
    V[y].push_back(x);
    h = max(h, y);
  }
  for (int i = 0; i <= m; i++) {
    G[i] = 0;
  }
  for (int i = 0; i < q; i++) {
    cin >> I;
    G[I] = 1;
    f = min(f, I);
    Se.insert(I);
    SeL.insert(M - I);
  }
  for (int i = 1; i <= n; i++) {
    if (V[i].size() == 0) {
      if (i == 1) {
        LL[1] = f - 1;
        LR[1] = f - 1;
        RL[1] = f - 1;
        RR[1] = f - 1;
        ILL = f;
        IRR = f;
        ILR = f;
        IRL = f;
      }
      LL[i + 1] = LL[i] + 1;
      LR[i + 1] = LR[i] + 1;
      RL[i + 1] = RL[i] + 1;
      RR[i + 1] = RR[i] + 1;
    } else {
      sort(V[i].begin(), V[i].end());
      if (i == 1) {
        LL[i] = 0;
        LR[i] = 0;
        RR[i] = 0;
        RL[i] = 0;
        Ir = 1;
        Il = 1;
      }
      Il = V[i][0];
      Ir = V[i][V[i].size() - 1];
      Dl = DM;
      Dr = DM;
      Dl = min(Dl, LL[i] + abs(ILL - Ir) + Ir - Il);
      Dl = min(Dl, LR[i] + abs(ILR - Ir) + Ir - Il);
      Dl = min(Dl, RL[i] + abs(IRL - Ir) + Ir - Il);
      Dl = min(Dl, RR[i] + abs(IRR - Ir) + Ir - Il);
      Dr = min(Dr, LL[i] + abs(ILL - Il) + Ir - Il);
      Dr = min(Dr, LR[i] + abs(ILR - Il) + Ir - Il);
      Dr = min(Dr, RL[i] + abs(IRL - Il) + Ir - Il);
      Dr = min(Dr, RR[i] + abs(IRR - Il) + Ir - Il);
      if (i == h) {
        cout << min(Dl, Dr);
        return 0;
      }
      it = Se.lower_bound(Ir);
      if (it != Se.end()) {
        IRR = *it;
        RR[i + 1] = Dr + (IRR - Ir) + 1;
      } else {
        IRR = 1;
        RR[i + 1] = DM;
      }
      it = Se.lower_bound(Il);
      if (it != Se.end()) {
        ILR = *it;
        LR[i + 1] = Dl + (ILR - Il) + 1;
      } else {
        ILR = 1;
        LR[i + 1] = DM;
      }
      it = SeL.lower_bound(M - Ir);
      if (it != SeL.end()) {
        IRL = M - (*it);
        RL[i + 1] = Dr + (Ir - IRL) + 1;
      } else {
        IRL = 1;
        RL[i + 1] = DM;
      }
      it = SeL.lower_bound(M - Il);
      if (it != SeL.end()) {
        ILL = M - (*it);
        LL[i + 1] = Dl + (Il - ILL) + 1;
      } else {
        ILL = 1;
        LL[i + 1] = DM;
      }
    }
  }
  return 0;
}
