#include <bits/stdc++.h>
using namespace std;
const long long inff = 0x3f3f3f3f3f3f3f3f;
long long n, m, k, q, b[200008], x, y, ans = inff, zz, ds, sd, mx;
vector<int> g[200008];
queue<pair<long long, long long> > qw[2];
int main() {
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k >> q;
  for (int i(1); i <= (k); ++i)
    scanf("%lld", &x), scanf("%lld", &y), g[x].push_back(y), mx = max(mx, x);
  for (int i(1); i <= (q); ++i) scanf("%lld", &b[i]);
  b[q + 1] = inff, b[q + 2] = -inff;
  sort(b + 1, b + q + 3);
  qw[0].push(pair<long long, long long>(1, 0));
  g[1].push_back(1);
  for (int i(1); i <= (n); ++i) {
    if (!g[i].size()) continue;
    x = *min_element(g[i].begin(), g[i].end());
    y = *max_element(g[i].begin(), g[i].end());
    ds = sd = inff;
    while (!qw[zz].empty()) {
      pair<long long, long long> er = qw[zz].front();
      qw[zz].pop();
      ds = min(ds, er.second + abs(er.first - x) + y - x);
      sd = min(sd, er.second + abs(er.first - y) + y - x);
      if (i == mx) ans = min(ans, sd), ans = min(ans, ds);
    }
    int xx = lower_bound(b + 1, b + q + 3, y) - b;
    qw[zz ^ 1].push(pair<long long, long long>(b[xx], ds + abs(y - b[xx])));
    qw[zz ^ 1].push(
        pair<long long, long long>(b[xx - 1], ds + abs(y - b[xx - 1])));
    xx = lower_bound(b + 1, b + q + 3, x) - b;
    qw[zz ^ 1].push(pair<long long, long long>(b[xx], sd + abs(x - b[xx])));
    qw[zz ^ 1].push(
        pair<long long, long long>(b[xx - 1], sd + abs(x - b[xx - 1])));
    zz ^= 1;
  }
  ans += mx - 1;
  cout << ans << endl;
  return 0;
}
