#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const long long INF = 1e9 + 47;
const long long LINF = INF * INF;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1 << 18;
int n, m, k, q;
vector<int> a[N];
int b[N];
long long dp[N][2];
int kin[N][2];
vector<int> ye;
int dist(int col1, int col2) {
  int ans = INF;
  auto it = lower_bound(b, b + q, col1) - b;
  if (it != q) ans = min(ans, b[it] - col1 + abs(b[it] - col2));
  if (it) ans = min(ans, col1 - b[it - 1] + abs(b[it - 1] - col2));
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k >> q;
  int last_row = -1;
  memset(kin, -1, sizeof(kin));
  a[1].push_back(1);
  for (int i = (0); i < (k); ++i) {
    int x, y;
    cin >> x >> y;
    a[x].push_back(y);
    last_row = max(last_row, x);
  }
  for (int i = (1); i < (n + 1); ++i) {
    sort(a[i].begin(), a[i].end());
    if ((int)((a[i]).size()) == 0) continue;
    ye.push_back(i);
    kin[i][0] = a[i][0];
    kin[i][1] = a[i].back();
  }
  for (int i = (0); i < (q); ++i) cin >> b[i];
  sort(b, b + q);
  for (int i = (1); i < (n + 1); ++i)
    for (int j = (0); j < (2); ++j) dp[i][j] = LINF;
  dp[1][1] = kin[1][1] - kin[1][0];
  int i = 1;
  while (i < last_row) {
    int nxt = *upper_bound(ye.begin(), ye.end(), i);
    int len = nxt - i;
    for (int j = (0); j < (2); ++j)
      for (int l = (0); l < (2); ++l) {
        long long tut = dp[i][j] + len;
        tut += dist(kin[i][j], kin[nxt][l ^ 1]);
        tut += abs(kin[nxt][l ^ 1] - kin[nxt][l]);
        dp[nxt][l] = min(dp[nxt][l], tut);
      }
    i = nxt;
  }
  long long ans = dp[last_row][1];
  if (last_row > 1) ans = min(ans, dp[last_row][0]);
  cout << ans << endl;
  cerr << "Time elapsed: " << clock() / (double)CLOCKS_PER_SEC << endl;
  return 0;
}
