#include <bits/stdc++.h>
using namespace std;
void _io() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
const int MAXN = 200005;
const long long mod = 1e9 + 7;
long long inp1, inp2, inp3;
long long n, m, k, q, ans;
long long l[MAXN], r[MAXN], f[MAXN][2];
vector<long long> safe;
long long cal(long long fr, long long to, long long p) {
  long long ret = 0;
  long long safe_l, safe_r;
  if (p == 0) {
    safe_r = lower_bound(safe.begin(), safe.end(), r[to]) - safe.begin();
    if (safe_r > 0)
      safe_l = safe_r - 1;
    else
      safe_l = safe_r;
    if (safe_r == safe.size()) safe_r--;
    ret = min(abs(fr - safe[safe_l]) + abs(safe[safe_l] - r[to]),
              abs(fr - safe[safe_r]) + abs(safe[safe_r] - r[to]));
  } else if (p == 1) {
    safe_r = lower_bound(safe.begin(), safe.end(), l[to]) - safe.begin();
    if (safe_r > 0)
      safe_l = safe_r - 1;
    else
      safe_l = safe_r;
    if (safe_r == safe.size()) safe_r--;
    ret = min(abs(fr - safe[safe_l]) + abs(safe[safe_l] - l[to]),
              abs(fr - safe[safe_r]) + abs(safe[safe_r] - l[to]));
  }
  return ret + abs(l[to] - r[to]);
}
int main() {
  _io();
  for (long long i = 0; i < MAXN; i++) {
    l[i] = r[i] = -1;
    f[i][0] = f[i][1] = 1e16;
  }
  cin >> n >> m >> k >> q;
  for (long long i = 1; i <= k; i++) {
    cin >> inp1 >> inp2;
    if (l[inp1] == -1) {
      l[inp1] = r[inp1] = inp2;
    } else {
      l[inp1] = min(l[inp1], inp2);
      r[inp1] = max(r[inp1], inp2);
    }
  }
  for (long long i = 1; i <= q; i++) {
    cin >> inp1;
    safe.push_back(inp1);
  }
  sort(safe.begin(), safe.end());
  long long last = 1;
  if (l[1] == -1) {
    l[1] = r[1] = 1;
    f[1][0] = f[1][1] = 0;
  } else {
    f[1][0] = abs(1 - r[1]) + abs(l[1] - r[1]);
    f[1][1] = abs(1 - l[1]) + abs(l[1] - r[1]);
    ans = min(f[1][0], f[1][1]);
  }
  for (long long i = 2; i <= n; i++) {
    if (l[i] == -1) continue;
    f[i][0] = min(f[i][0], f[last][0] + i - last + cal(l[last], i, 0));
    f[i][0] = min(f[i][0], f[last][1] + i - last + cal(r[last], i, 0));
    f[i][1] = min(f[i][1], f[last][0] + i - last + cal(l[last], i, 1));
    f[i][1] = min(f[i][1], f[last][1] + i - last + cal(r[last], i, 1));
    ans = min(f[i][0], f[i][1]);
    last = i;
  }
  cout << ans;
  return 0;
}
