#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 2e5 + 3;
const long long INF = 1e9 + 3;
const long long INF2 = 1e18 + 3;
vector<long long> v[MAXN];
vector<long long> kol;
int32_t main() {
  long long n, h, m, k;
  long long x, y, l, r;
  long long pl, pr, lvl;
  long long dpl, dpr, mnl, mnr;
  scanf("%lld %lld %lld %lld", &n, &h, &m, &k);
  while (m--) {
    scanf("%lld %lld", &x, &y);
    v[x].push_back(y);
  }
  for (long long i = 1; i <= k; i++) {
    scanf("%lld", &x);
    kol.push_back(x);
  }
  kol.push_back(-INF - 1);
  kol.push_back(-INF);
  kol.push_back(INF);
  kol.push_back(INF + 1);
  sort(kol.begin(), kol.end());
  lvl = pl = pr = 1;
  dpl = dpr = 0;
  auto iter = kol.begin();
  bool cs = true;
  for (long long i = 1; i < MAXN; i++) {
    if (v[i].empty()) continue;
    sort(v[i].begin(), v[i].end());
    l = v[i][0];
    r = v[i].back();
    iter = upper_bound(kol.begin(), kol.end(), pr);
    mnl = mnr = INF2;
    for (long long j = 0; j < 2; j++) {
      mnl = min(mnl, abs(*iter - pr) + abs(*iter - r) + r - l + dpr);
      mnr = min(mnr, abs(*iter - pr) + abs(*iter - l) + r - l + dpr);
      iter--;
    }
    iter = upper_bound(kol.begin(), kol.end(), pl);
    for (long long j = 0; j < 2; j++) {
      mnl = min(mnl, abs(*iter - pl) + abs(*iter - r) + r - l + dpl);
      mnr = min(mnr, abs(*iter - pl) + abs(*iter - l) + r - l + dpl);
      iter--;
    }
    if (i == 1) {
      dpl = 2 * r - l - 1;
      dpr = r - 1;
    } else {
      dpl = mnl;
      dpr = mnr;
    }
    pl = l;
    pr = r;
    dpl += i - lvl;
    dpr += i - lvl;
    lvl = i;
  }
  printf("%lld", min(dpl, dpr));
  return 0;
}
