#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int infi = 2147483600;
const long long infl = 1e17;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  long long n, m, k, q;
  cin >> n >> m >> k >> q;
  vector<set<long long>> tres(n);
  long long MAX = 0;
  for (long long i = 0; i < (long long)k; i++) {
    long long r, c;
    cin >> r >> c;
    r--;
    c--;
    MAX = max(MAX, r);
    tres[r].insert(c);
  }
  vector<long long> b;
  b.emplace_back(-infl);
  for (long long i = 0; i < (long long)q; i++) {
    long long bi;
    cin >> bi;
    bi--;
    b.emplace_back(bi);
  }
  b.emplace_back(infl);
  sort((b).begin(), (b).end());
  if (MAX == 0) {
    auto ittr = tres[0].end();
    ittr--;
    cout << *ittr << endl;
    return 0;
  }
  vector<vector<long long>> dp(n + 1, vector<long long>(4, infl));
  vector<vector<long long>> idx(n + 1, vector<long long>(4, -infl));
  dp[0][0] = 0;
  if (tres[0].size() == 0) {
    idx[1][0] = b[1];
    dp[1][0] = b[1] + 1;
  } else {
    auto ittr = tres[0].end();
    ittr--;
    long long mx = *ittr;
    long long ix = lower_bound((b).begin(), (b).end(), mx) - b.begin();
    long long b2 = b[ix - 1], b3 = b[ix];
    idx[1][2] = b2;
    idx[1][3] = b3;
    dp[1][2] = 1 + dp[0][0] + mx + abs(b2 - mx);
    dp[1][3] = 1 + dp[0][0] + mx + abs(b3 - mx);
  }
  for (long long i = (long long)1; i < (long long)n; i++) {
    if (i == MAX) {
      break;
    }
    if (tres[i].size() == 0) {
      for (long long j = 0; j < (long long)4; j++) {
        dp[i + 1][j] = dp[i][j] + 1;
        idx[i + 1][j] = idx[i][j];
      }
      continue;
    }
    auto itr = tres[i].begin(), ittr = tres[i].end();
    ittr--;
    long long mn = *itr, mx = *ittr;
    long long left = lower_bound((b).begin(), (b).end(), mn) - b.begin();
    long long right = lower_bound((b).begin(), (b).end(), mx) - b.begin();
    idx[i + 1][0] = b[left - 1];
    idx[i + 1][1] = b[left];
    idx[i + 1][2] = b[right - 1];
    idx[i + 1][3] = b[right];
    for (long long j = 0; j < (long long)4; j++) {
      for (long long k = 0; k < (long long)4; k++) {
        dp[i + 1][j] =
            min(dp[i + 1][j], dp[i][k] + mx - mn + 1 + abs(idx[i][k] - mn) +
                                  abs(idx[i + 1][j] - mx));
        dp[i + 1][j] =
            min(dp[i + 1][j], dp[i][k] + mx - mn + 1 + abs(idx[i + 1][j] - mn) +
                                  abs(idx[i][k] - mx));
      }
    }
  }
  long long ans = infl;
  auto itr = tres[MAX].begin(), ittr = tres[MAX].end();
  ittr--;
  long long mn = *itr, mx = *ittr;
  for (long long j = 0; j < (long long)4; j++) {
    ans = min(ans, mx - mn + dp[MAX][j] + abs(idx[MAX][j] - mn));
    ans = min(ans, mx - mn + dp[MAX][j] + abs(idx[MAX][j] - mx));
  }
  cout << ans << endl;
}
