#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
long long n, m, k, q;
long long min_kb[MAXN], max_kb[MAXN];
long long dp[MAXN][2];
vector<long long> safe;
int main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  cin >> n >> m >> k >> q;
  for (long long i = 1; i <= n; ++i)
    dp[i][0] = dp[i][1] = min_kb[i] = LLONG_MAX, max_kb[i] = LLONG_MIN;
  for (long long i = 1; i <= k; ++i) {
    long long r, c;
    cin >> r >> c;
    min_kb[r] = min(min_kb[r], c);
    max_kb[r] = max(max_kb[r], c);
  }
  for (long long i = 1; i <= q; ++i) {
    long long b;
    cin >> b;
    safe.emplace_back(b);
  }
  if (min_kb[1] == LLONG_MAX) {
    min_kb[1] = max_kb[1] = 1;
    dp[1][0] = dp[1][1] = 0;
  } else {
    dp[1][0] = 2 * max_kb[1] - min_kb[1] - 1;
    dp[1][1] = max_kb[1] - 1;
  }
  sort(safe.begin(), safe.end());
  long long prevr = 1;
  for (long long i = 2; i <= n; ++i) {
    if (min_kb[i] == LLONG_MAX) {
      dp[i][0] = dp[i - 1][0];
      dp[i][1] = dp[i - 1][1];
      continue;
    }
    auto x1 = upper_bound(safe.begin(), safe.end(), min_kb[i]);
    auto x2 = upper_bound(safe.begin(), safe.end(), max_kb[i]);
    vector<long long> AAAAA;
    if (x1 != safe.end()) AAAAA.emplace_back(*x1);
    if (x2 != safe.end()) AAAAA.emplace_back(*x2);
    if (x1 != safe.begin()) AAAAA.emplace_back(*(--x1));
    if (x2 != safe.begin()) AAAAA.emplace_back(*(--x2));
    for (long long b : AAAAA) {
      long long xxx = min(abs(b - min_kb[prevr]) + i - prevr + dp[i - 1][0],
                          abs(b - max_kb[prevr]) + i - prevr + dp[i - 1][1]);
      if (b <= min_kb[i]) {
        dp[i][0] = min(dp[i][0], 2 * max_kb[i] - b - min_kb[i] + xxx);
        dp[i][1] = min(dp[i][1], max_kb[i] - b + xxx);
      } else if (b >= max_kb[i]) {
        dp[i][0] = min(dp[i][0], b - min_kb[i] + xxx);
        dp[i][1] = min(dp[i][1], b + max_kb[i] - 2 * min_kb[i] + xxx);
      } else {
        dp[i][0] = min(dp[i][0], 2 * max_kb[i] - b - min_kb[i] + xxx);
        dp[i][1] = min(dp[i][1], b + max_kb[i] - 2 * min_kb[i] + xxx);
      }
    }
    prevr = i;
  }
  cout << min(dp[n][0], dp[n][1]);
  return 0;
}
