#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long mpow(long long a, long long b) {
  if (b == 0) return 1;
  long long t1 = mpow(a, b / 2);
  t1 *= t1;
  t1 %= MOD;
  if (b % 2) t1 *= a;
  t1 %= MOD;
  return t1;
}
long long mpow(long long a, long long b, long long p) {
  if (b == 0) return 1;
  long long t1 = mpow(a, b / 2);
  t1 *= t1;
  t1 %= p;
  if (b % 2) t1 *= a;
  t1 %= p;
  return t1;
}
long long modinverse(long long a, long long m) {
  long long m0 = m;
  long long y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long q = a / m;
    long long t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
long long range(long long l, long long r) { return l + rand() % (r - l + 1); }
long long f(long long a, long long b, long long en, long long ex) {
  long long ans = -abs(en - ex);
  long long ma = 0, mi = 1e11;
  ma = max(ma, a);
  ma = max(ma, b);
  ma = max(ma, en);
  ma = max(ma, ex);
  mi = min(mi, a);
  mi = min(mi, b);
  mi = min(mi, en);
  mi = min(mi, ex);
  ans += 2 * (ma - mi);
  return ans;
}
void solve() {
  long long n, m, k, q;
  cin >> n >> m >> k >> q;
  vector<long long> mmin(n + 1, m + 1);
  vector<long long> mmax(n + 1, 0);
  long long ans = 0;
  for (long long i = 0; i < k; i++) {
    long long r, c;
    cin >> r >> c;
    ans = max(ans, r - 1);
    mmin[r] = min(mmin[r], c);
    mmax[r] = max(mmax[r], c);
  }
  vector<long long> op;
  for (long long i = 0; i < q; i++) {
    long long t;
    cin >> t;
    op.push_back(t);
  }
  sort((op).begin(), (op).end());
  vector<long long> pr(m + 1), nx(m + 1);
  long long in = 0;
  for (long long i = 1; i < m + 1; i++) {
    if (in < q - 1 && op[in + 1] == i) {
      in++;
    }
    pr[i] = op[in];
  }
  in = q - 1;
  for (long long i = m; i >= 1; i--) {
    if (in > 0 && op[in - 1] == i) {
      in--;
    }
    nx[i] = op[in];
  }
  long long val1 = 0, val2 = 1;
  if (mmax[1] == 0) {
    val2 = op[0];
    val1 = op[0] - 1;
  }
  vector<long long> p(4, val2);
  vector<long long> ans1(4, val1);
  for (long long i = 1; i < ans + 2; i++) {
    if (mmax[i] != 0) {
      vector<long long> tan(4, 1e11);
      vector<long long> pt(4);
      pt[0] = pr[mmin[i]];
      pt[1] = pr[mmax[i]];
      pt[2] = nx[mmin[i]];
      pt[3] = nx[mmax[i]];
      if (i == ans + 1) {
        pt[0] = mmin[i];
        pt[1] = mmax[i];
      }
      for (long long i1 = 0; i1 < 4; i1++) {
        for (long long j = 0; j < 4; j++) {
          tan[j] = min(tan[j], ans1[i1] + f(mmin[i], mmax[i], p[i1], pt[j]));
        }
      }
      p = pt;
      ans1 = tan;
    }
  }
  long long add = 1e11;
  for (long long i = 0; i < 4; i++) add = min(ans1[i], add);
  ans += add;
  cout << ans << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t = 1;
  for (long long i = 0; i < t; i++) {
    solve();
  }
  return 0;
}
