#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long modularExponentiation(long long base, long long power,
                                long long mod) {
  long long ans = 1;
  while (power > 0) {
    if (power & 1) ans = (ans * base) % mod;
    power = power >> 1;
    base = (base * base) % mod;
  }
  return ans;
}
long long n, m, k, q, x, y, tleft[500010], tright[500010], ntleft[500010],
    ntright[500010], dp[500010][2];
vector<long long> safe;
void init() {
  for (int i = 1; i <= n; ++i) {
    tleft[i] = m + 1;
    tright[i] = 0;
  }
  safe.clear();
  return;
}
void solve() {
  cin >> n >> m >> k >> q;
  init();
  for (int i = 1; i <= k; ++i) {
    cin >> x >> y;
    tleft[x] = min(tleft[x], y);
    tright[x] = max(tright[x], y);
  }
  for (int i = 1; i <= q; ++i) {
    cin >> x;
    safe.push_back(x);
  }
  safe.push_back(0), safe.push_back(m + 1);
  sort(safe.begin(), safe.end());
  for (int i = 0; i <= (int)safe.size() - 2; ++i) {
    for (int j = safe[i]; j <= safe[i + 1] - 1; ++j) ntleft[j] = safe[i];
  }
  for (int i = 1; i <= (int)safe.size() - 1; ++i) {
    for (int j = safe[i - 1] + 1; j <= safe[i]; ++j) ntright[j] = safe[i];
  }
  for (int i = 1; i <= m; ++i) {
    if (ntleft[i] == 0 || ntleft[i] == m + 1) ntleft[i] = 1e18;
    if (ntright[i] == 0 || ntright[i] == m + 1) ntright[i] = 1e18;
  }
  if (tleft[1] == m + 1 && tright[1] == 0) {
    tleft[1] = 1;
    tright[1] = 1;
  }
  dp[1][0] = abs(tleft[1] - 1);
  dp[1][1] = abs(tright[1] - 1);
  int last = 1;
  for (int i = 2; i <= n; ++i) {
    if (tleft[i] == m + 1 && tright[i] == 0) continue;
    dp[i][0] = dp[i][1] = 1e18;
    dp[i][0] = min(dp[i][0], dp[last][0] + abs(tright[last] - tleft[last]) +
                                 abs(tright[last] - ntleft[tleft[i]]) +
                                 abs(tleft[i] - ntleft[tleft[i]]));
    dp[i][0] = min(dp[i][0], dp[last][0] + abs(tright[last] - tleft[last]) +
                                 abs(tright[last] - ntright[tleft[i]]) +
                                 abs(tleft[i] - ntright[tleft[i]]));
    dp[i][0] = min(dp[i][0], dp[last][1] + abs(tright[last] - tleft[last]) +
                                 abs(tleft[last] - ntleft[tleft[i]]) +
                                 abs(tleft[i] - ntleft[tleft[i]]));
    dp[i][0] = min(dp[i][0], dp[last][1] + abs(tright[last] - tleft[last]) +
                                 abs(tleft[last] - ntright[tleft[i]]) +
                                 abs(tleft[i] - ntright[tleft[i]]));
    dp[i][1] = min(dp[i][1], dp[last][0] + abs(tright[last] - tleft[last]) +
                                 abs(tright[last] - ntleft[tright[i]]) +
                                 abs(tright[i] - ntleft[tright[i]]));
    dp[i][1] = min(dp[i][1], dp[last][0] + abs(tright[last] - tleft[last]) +
                                 abs(tright[last] - ntright[tright[i]]) +
                                 abs(tright[i] - ntright[tright[i]]));
    dp[i][1] = min(dp[i][1], dp[last][1] + abs(tright[last] - tleft[last]) +
                                 abs(tleft[last] - ntleft[tright[i]]) +
                                 abs(tright[i] - ntleft[tright[i]]));
    dp[i][1] = min(dp[i][1], dp[last][1] + abs(tright[last] - tleft[last]) +
                                 abs(tleft[last] - ntright[tright[i]]) +
                                 abs(tright[i] - ntright[tright[i]]));
    dp[i][0] += i - last;
    dp[i][1] += i - last;
    last = i;
  }
  cout << min(dp[last][0], dp[last][1]) + abs(tright[last] - tleft[last])
       << "\n";
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
