#include <bits/stdc++.h>
const long long int INF = 1e18 + 7;
const int N = 2e5 + 5;
using namespace std;
int v[2][N], b[N];
long long int dp[2][N];
long long int vis(long long int a, long long int b, long long int c) {
  return abs(b - a) + abs(c - b);
}
void solve() {
  int n, m, k, q, i, r, c;
  cin >> n >> m >> k >> q;
  long long int vert = 0;
  for (i = 1; i <= n; i++) {
    v[0][i] = m + 1;
    v[1][i] = 0;
  }
  v[0][1] = v[1][1] = 1;
  for (i = 0; i < k; i++) {
    cin >> r >> c;
    v[0][r] = min(v[0][r], c);
    v[1][r] = max(v[1][r], c);
    vert = max(vert, r * 1LL - 1);
  }
  for (i = 0; i < q; i++) cin >> b[i];
  sort(b, b + q);
  memset(dp, 0, sizeof(dp));
  dp[0][1] = (v[1][1] - 1) + (v[1][1] - v[0][1]);
  dp[1][1] = (v[1][1] - 1);
  for (i = 2; i <= n; i++) {
    if (v[0][i] == m + 1) {
      v[0][i] = v[0][i - 1];
      v[1][i] = v[1][i - 1];
      dp[0][i] = dp[0][i - 1];
      dp[1][i] = dp[1][i - 1];
    } else {
      dp[0][i] = dp[1][i] = INF;
      int it = (int)(lower_bound(b, b + q, v[0][i - 1]) - b);
      if (it < q) {
        dp[0][i] = min(dp[0][i], dp[0][i - 1] + abs(b[it] - v[0][i - 1]) +
                                     vis(b[it], v[1][i], v[0][i]));
        dp[1][i] = min(dp[1][i], dp[0][i - 1] + abs(b[it] - v[0][i - 1]) +
                                     vis(b[it], v[0][i], v[1][i]));
      }
      if (it > 0) {
        it--;
        dp[0][i] = min(dp[0][i], dp[0][i - 1] + abs(b[it] - v[0][i - 1]) +
                                     vis(b[it], v[1][i], v[0][i]));
        dp[1][i] = min(dp[1][i], dp[0][i - 1] + abs(b[it] - v[0][i - 1]) +
                                     vis(b[it], v[0][i], v[1][i]));
      }
      it = (int)(lower_bound(b, b + q, v[1][i - 1]) - b);
      if (it < q) {
        dp[0][i] = min(dp[0][i], dp[1][i - 1] + abs(b[it] - v[1][i - 1]) +
                                     vis(b[it], v[1][i], v[0][i]));
        dp[1][i] = min(dp[1][i], dp[1][i - 1] + abs(b[it] - v[1][i - 1]) +
                                     vis(b[it], v[0][i], v[1][i]));
      }
      if (it > 0) {
        it--;
        dp[0][i] = min(dp[0][i], dp[1][i - 1] + abs(b[it] - v[1][i - 1]) +
                                     vis(b[it], v[1][i], v[0][i]));
        dp[1][i] = min(dp[1][i], dp[1][i - 1] + abs(b[it] - v[1][i - 1]) +
                                     vis(b[it], v[0][i], v[1][i]));
      }
    }
  }
  cout << min(dp[0][n], dp[1][n]) + vert << '\n';
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int t = 1;
  for (int tc = 1; tc <= t; tc++) {
    solve();
  }
  return 0;
}
