#include <bits/stdc++.h>
using namespace std;
long long l[200001];
long long r[200001];
long long left_[200001];
long long right_[200001];
long long dp[200001][3];
vector<int> b;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  int n, m, k, q;
  cin >> n >> m >> k >> q;
  long long max_height = 0;
  for (int i = 0; i < k; ++i) {
    long long x, y;
    cin >> x >> y;
    max_height = max(max_height, x);
    if (l[x] == 0)
      l[x] = y;
    else
      l[x] = min(l[x], y);
    if (r[x] == 0)
      r[x] = y;
    else
      r[x] = max(r[x], y);
  }
  for (int i = 0; i < q; ++i) {
    int x;
    cin >> x;
    b.push_back(x);
  }
  sort(b.begin(), b.end());
  int cur = 0;
  int pos = 0;
  for (int i = 1; i <= m; ++i) {
    if (pos < b.size() && b[pos] == i) {
      cur = i;
      pos++;
    }
    left_[i] = cur;
  }
  reverse(b.begin(), b.end());
  cur = 0;
  pos = 0;
  for (int i = m; i >= 1; --i) {
    if (pos < b.size() && b[pos] == i) {
      cur = i;
      pos++;
    }
    right_[i] = cur;
  }
  pos = 1;
  int cur_left = 1;
  int cur_right = 1;
  if (r[1] != 0) {
    dp[1][1] = r[1] - 1 + r[1] - l[1];
    cur_left = l[1];
    cur_right = r[1];
    dp[1][2] = r[1] - 1;
  }
  for (int i = 2; i <= max_height; ++i) {
    if (l[i] == 0) {
      continue;
    }
    long long tax1 = 1e18;
    long long tax2 = 1e18;
    if (left_[cur_left] != 0)
      tax1 = dp[pos][1] + abs(left_[cur_left] - cur_left) +
             abs(r[i] - left_[cur_left]) + r[i] - l[i];
    if (right_[cur_left] != 0)
      tax1 = min(tax1, dp[pos][1] + abs(right_[cur_left] - cur_left) +
                           abs(r[i] - right_[cur_left]) + r[i] - l[i]);
    if (left_[cur_right] != 0)
      tax2 = dp[pos][2] + abs(left_[cur_right] - cur_right) +
             abs(r[i] - left_[cur_right]) + r[i] - l[i];
    if (right_[cur_right] != 0)
      tax2 = min(tax2, dp[pos][2] + abs(right_[cur_right] - cur_right) +
                           abs(r[i] - right_[cur_right]) + r[i] - l[i]);
    dp[i][1] = min(tax1, tax2);
    tax1 = 1e18;
    tax2 = 1e18;
    if (left_[cur_left] != 0)
      tax1 = dp[pos][1] + abs(left_[cur_left] - cur_left) +
             abs(l[i] - left_[cur_left]) + r[i] - l[i];
    if (right_[cur_left] != 0)
      tax1 = min(tax1, dp[pos][1] + abs(right_[cur_left] - cur_left) +
                           abs(l[i] - right_[cur_left]) + r[i] - l[i]);
    if (left_[cur_right] != 0)
      tax2 = dp[pos][2] + abs(left_[cur_right] - cur_right) +
             abs(l[i] - left_[cur_right]) + r[i] - l[i];
    if (right_[cur_right] != 0)
      tax2 = min(tax2, dp[pos][2] + abs(right_[cur_right] - cur_right) +
                           abs(l[i] - right_[cur_right]) + r[i] - l[i]);
    dp[i][2] = min(tax1, tax2);
    cur_left = l[i];
    cur_right = r[i];
    pos = i;
  }
  cout << min(dp[max_height][1], dp[max_height][2]) + max_height - 1;
  return 0;
}
