#include <bits/stdc++.h>
using namespace std;
long long n, m, k, q;
vector<long long> gg[200100];
vector<long long> g[200100];
long long b[200100];
long long findleft(int j) {
  long long lf = (lower_bound(b, b + q, j) - b);
  if (lf < q) {
    if (b[lf] == j) return b[lf];
  }
  if (lf > 0) lf--;
  return b[lf];
}
long long findright(int j) {
  long long lf = (lower_bound(b, b + q, j) - b);
  if (lf < q)
    return b[lf];
  else
    return b[(lf - 1)];
}
long long ww[200100][5];
long long dp[200100][5];
long long abbbs(long long a, long long b) {
  if (a > b)
    return (a - b);
  else
    return (b - a);
}
long long solve(int i, int j) {
  if (i == n + 1) return 0LL;
  if (dp[i][j] != -1) return dp[i][j];
  long long sol = 1e16;
  long long pp = ww[i - 1][j];
  long long st = g[i][0];
  long long en = g[i][(g[i].size() - 1)];
  for (int kk = 0; kk < 4; kk++) {
    if (i != n)
      sol = min(sol, abbbs(pp, st) + abbbs(st, en) + abbbs(en, ww[i][kk]) +
                         solve(i + 1, kk));
    else
      sol = min(sol, abbbs(pp, st) + abbbs(st, en) + solve(i + 1, kk));
  }
  for (int kk = 0; kk < 4; kk++) {
    if (i != n)
      sol = min(sol, abbbs(pp, en) + abbbs(en, st) + abbbs(st, ww[i][kk]) +
                         solve(i + 1, kk));
    else
      sol = min(sol, abbbs(pp, en) + abbbs(en, st) + solve(i + 1, kk));
  }
  return dp[i][j] = sol;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k >> q;
  memset(dp, -1, sizeof dp);
  long long mx = 0;
  for (int i = 0; i < k; i++) {
    long long aa, b;
    cin >> aa >> b;
    gg[aa].push_back(b);
    mx = max(mx, aa);
  }
  int jj = 1;
  for (int i = 1; i <= n; i++) {
    if (gg[i].size() != 0) {
      g[jj] = gg[i];
      sort(g[jj].begin(), g[jj].end());
      jj++;
    }
  }
  n = jj - 1;
  for (int i = 0; i < q; i++) {
    cin >> b[i];
  }
  sort(b, b + q);
  for (int i = 1; i <= n; i++) {
    if (g[i].size() != 0) {
      long long to = g[i][0];
      long long lf = findleft(to);
      long long rg = findright(to);
      ww[i][0] = lf;
      ww[i][1] = rg;
      to = g[i][g[i].size() - 1];
      lf = findleft(to);
      rg = findright(to);
      ww[i][2] = lf;
      ww[i][3] = rg;
    }
  }
  long long sol = 1e16;
  long long st = g[1][0];
  long long en = g[1][g[1].size() - 1];
  if (gg[1].size() != 0) {
    for (int kk = 0; kk < 4; kk++) {
      if (n != 1)
        sol = min(sol, abbbs(st, 1LL) + abbbs(st, en) + abbbs(en, ww[1][kk]) +
                           solve(2, kk));
      else
        sol = min(sol, abbbs(st, 1LL) + abbbs(st, en));
    }
  } else {
    for (int kk = 0; kk < 4; kk++) {
      if (n != 1)
        sol = min(sol, abbbs(1LL, b[0]) + abbbs(st, b[0]) + abbbs(st, en) +
                           abbbs(en, ww[1][kk]) + solve(2, kk));
      else
        sol = min(sol, abbbs(1LL, b[0]) + abbbs(st, b[0]) + abbbs(st, en));
    }
    for (int kk = 0; kk < 4; kk++) {
      if (n != 1)
        sol = min(sol, abbbs(1LL, b[0]) + abbbs(en, b[0]) + abbbs(st, en) +
                           abbbs(st, ww[1][kk]) + solve(2, kk));
      else
        sol = min(sol, abbbs(1LL, b[0]) + abbbs(en, b[0]) + abbbs(st, en));
    }
  }
  sol += (mx - 1);
  cout << sol << endl;
  return 0;
}
