#include <bits/stdc++.h>
using namespace std;
template <typename T>
void smin(T &a, const T &b) {
  a = min(a, b);
}
template <typename T>
void smax(T &a, const T &b) {
  a = max(a, b);
}
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m, k, q;
  cin >> n >> m >> k >> q;
  vector<vector<int>> a(n, {m, -1});
  smin(a[0][0], 0);
  vector<vector<long long>> dp(n, {(long long)4 * n * m, (long long)4 * n * m});
  long long add = 0;
  for (int i = 0; i < k; i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    smin(a[x][0], y);
    smax(a[x][1], y);
    smax(add, (long long)x);
  }
  vector<int> b(q);
  for (int &i : b) {
    cin >> i;
    i--;
  }
  sort((b).begin(), (b).end());
  auto ri = [&](int y) -> int {
    auto it1 = lower_bound((b).begin(), (b).end(), y);
    int ret = 0;
    if (it1 != b.end())
      ret = *it1;
    else
      ret = *(--it1);
    return ret;
  };
  auto le = [&](int y) -> int {
    auto it1 = lower_bound((b).begin(), (b).end(), y);
    int ret = 0;
    if (it1 != b.begin())
      ret = *(--it1);
    else
      ret = *it1;
    return ret;
  };
  auto clc = [&](vector<int> pos) -> long long {
    int ans = 0;
    for (int i = 0; i < (int)pos.size() - 1; i++)
      ans += abs(pos[i + 1] - pos[i]);
    return ans;
  };
  for (int i = 0; i < n; i++) {
    if (i == 0) {
      dp[i][0] = max(0, a[i][1] + (a[i][1] - a[i][0]));
      dp[i][1] = max(0, a[i][1]);
    } else if (a[i] == vector<int>{m, -1}) {
      dp[i] = dp[i - 1];
      a[i] = a[i - 1];
    } else {
      vector<int> bs = {ri(a[i][0]), ri(a[i][1]), le(a[i][0]), le(a[i][1])};
      for (int d1 = 0; d1 < 2; d1++)
        for (int d3 = 0; d3 < 4; d3++)
          for (int d2 = 0; d2 < 2; d2++)
            smin(dp[i][d1], dp[i - 1][d2] + clc({a[i][d1], a[i][d1 ^ 1], bs[d3],
                                                 a[i - 1][d2]}));
    }
  }
  cout << min(dp[n - 1][0], dp[n - 1][1]) + add;
  return 0;
}
