#include <bits/stdc++.h>
using namespace std;
vector<long long> vec[200002];
long long ara[200005], p, q;
long long bs(long long l, long long r) {
  if (l > r) {
    l += r;
    r = (l - r);
    l -= r;
  }
  long long lo = 1, hi = q, mid;
  while (lo <= hi) {
    mid = (lo + hi) / 2;
    if (ara[mid] >= l && ara[mid] <= r)
      break;
    else if (ara[mid] < l)
      lo = mid + 1;
    else
      hi = mid - 1;
  }
  if (ara[mid] >= l && ara[mid] <= r) return 0;
  lo = 1, hi = q, mid;
  while (lo <= hi) {
    mid = (lo + hi) / 2;
    if (ara[mid] < l && (mid == q || ara[mid + 1] >= l))
      break;
    else if (ara[mid] < l)
      lo = mid + 1;
    else
      hi = mid - 1;
  }
  long long z;
  if (ara[mid] < l) {
    z = l - ara[mid];
  } else {
    z = 1e9;
  }
  lo = 1, hi = q, mid;
  while (lo <= hi) {
    mid = (lo + hi) / 2;
    if (ara[mid] > r && (mid == 1 || ara[mid - 1] <= r))
      break;
    else if (ara[mid] <= r)
      lo = mid + 1;
    else
      hi = mid - 1;
  }
  if (ara[mid] > r) {
    z = min(z, ara[mid] - r);
  }
  return z * 2;
}
int main() {
  long long n, m, i, j, k, a, b, c, x, y, z;
  cin >> n >> m >> p >> q;
  for (i = 1; i <= p; i++) {
    scanf("%lld%lld", &a, &b);
    vec[a].push_back(b);
  }
  for (i = 1; i <= q; i++) {
    scanf("%lld", &ara[i]);
  }
  sort(ara + 1, ara + q + 1);
  for (i = 1; i <= n; i++) {
    sort(vec[i].begin(), vec[i].end());
  }
  long long lans = 0, rans = 0, sz, pl = 0, pr = 0, l, r, tmp;
  for (i = n; i > 1; i--) {
    if (vec[i].size() == 0) {
      if (pl > 0 && pr > 0) {
        lans += 1;
        rans += 1;
      }
      continue;
    }
    sz = vec[i].size();
    l = vec[i][0], r = vec[i][sz - 1];
    if (pl == 0 && pr == 0) {
      lans = (r - l), rans = (r - l);
      pl = l, pr = r;
      continue;
    }
    lans++;
    rans++;
    sz = vec[i].size();
    r = vec[i][sz - 1];
    l = vec[i][0];
    y = pr;
    x = r;
    y = pr;
    z = bs(x, y) + abs(x - y) + rans;
    z = min(z, (bs(x, pl) + abs(x - pl) + lans));
    z += abs(x - vec[i][0]);
    tmp = z;
    x = vec[i][0];
    y = pr;
    z = bs(x, y) + abs(x - y) + rans;
    z = min(z, (bs(x, pl) + abs(x - pl) + lans));
    z += abs(x - vec[i][sz - 1]);
    lans = tmp;
    rans = z;
    pl = l, pr = r;
  }
  i = 1;
  if (vec[i].size() == 0) {
    vec[i].push_back(1);
  }
  if (pl > 0) {
    lans++;
    rans++;
    sz = vec[i].size();
    x = vec[i][sz - 1];
    y = pr;
    z = bs(x, y) + abs(x - y) + rans;
    z = min(z, bs(x, pl) + abs(x - pl) + lans);
    z += abs(x - 1);
  } else {
    sz = vec[i].size();
    z = (vec[1][sz - 1] - 1);
  }
  cout << z << endl;
  return 0;
}
