#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unrolled-loops")
using namespace std;
const long long mod = 998244353;
const long long INF = 1e12;
const long long oo = 1e6;
long long test = 1;
void Varvalian() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
void db();
long long n, m, k, q, dis = 1, ans, maxx;
long long l[200200], r[200200];
long long dp[200200][5];
vector<long long> safe;
long long preupL, preupR, preloL, preloR;
long long upL, upR, loL, loR;
long long up(long long x) {
  long long l = 0, r = safe.size() - 1, m, res;
  while (l <= r) {
    m = (l + r) / 2;
    if (safe[m] >= x) {
      res = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  if (res == 0) res++;
  if (res == safe.size() - 1) res--;
  return safe[res];
}
long long lo(long long x) {
  long long l = 0, r = safe.size() - 1, m, res;
  while (l <= r) {
    m = (l + r) / 2;
    if (safe[m] <= x) {
      res = m;
      l = m + 1;
    } else
      r = m - 1;
  }
  if (res == 0) res++;
  if (res == safe.size() - 1) res--;
  return safe[res];
}
long long c(long long i, long long lr, long long LR) {
  if (i == maxx) return 0;
  return abs(lr - LR);
}
void In() {
  cin >> n >> m >> k >> q;
  for (long long i = 1; i <= n; i++) l[i] = 1e9, r[i] = -1e9;
  l[1] = 1;
  r[1] = 1;
  for (long long i = 1; i <= k; i++) {
    long long x, y;
    cin >> x >> y;
    l[x] = min(l[x], y);
    r[x] = max(r[x], y);
  }
  for (long long i = 1; i <= n; i++)
    if (l[i] != 1e9) maxx = i;
  for (long long i = 1; i <= q; i++) {
    long long x;
    cin >> x;
    safe.push_back(x);
  }
  safe.push_back(0);
  safe.push_back(m + 1);
  sort(safe.begin(), safe.end());
}
void sol() {
  In();
  preloL = lo(l[1]);
  preloR = lo(r[1]);
  preupL = up(l[1]);
  preupR = up(r[1]);
  dp[1][1] = (r[1] - 1) + c(1, r[1], preloL);
  dp[1][2] = (r[1] - 1) + c(1, r[1], preloR);
  dp[1][3] = (r[1] - 1) + c(1, r[1], preupL);
  dp[1][4] = (r[1] - 1) + c(1, r[1], preupR);
  ans = min(min(dp[1][1], dp[1][2]), min(dp[1][3], dp[1][4]));
  for (long long i = 2; i <= n; i++) {
    if (l[i] == 1e9) {
      dp[i][1] = dp[i - 1][1] + 1;
      dp[i][2] = dp[i - 1][2] + 1;
      dp[i][3] = dp[i - 1][3] + 1;
      dp[i][4] = dp[i - 1][4] + 1;
      continue;
    }
    loL = lo(l[i]);
    loR = lo(r[i]);
    upL = up(l[i]);
    upR = up(r[i]);
    dp[i][1] = dp[i - 1][1] + dis +
               min(abs(preloL - l[i]) + (r[i] - l[i]) + c(i, r[i], loL),
                   abs(preloL - r[i]) + (r[i] - l[i]) + c(i, l[i], loL));
    dp[i][1] =
        min(dp[i][1],
            dp[i - 1][2] + dis +
                min(abs(preloR - l[i]) + (r[i] - l[i]) + c(i, r[i], loL),
                    abs(preloR - r[i]) + (r[i] - l[i]) + c(i, l[i], loL)));
    dp[i][1] =
        min(dp[i][1],
            dp[i - 1][3] + dis +
                min(abs(preupL - l[i]) + (r[i] - l[i]) + c(i, r[i], loL),
                    abs(preupL - r[i]) + (r[i] - l[i]) + c(i, l[i], loL)));
    dp[i][1] =
        min(dp[i][1],
            dp[i - 1][4] + dis +
                min(abs(preupR - l[i]) + (r[i] - l[i]) + c(i, r[i], loL),
                    abs(preupR - r[i]) + (r[i] - l[i]) + c(i, l[i], loL)));
    dp[i][2] = dp[i - 1][1] + dis +
               min(abs(preloL - l[i]) + (r[i] - l[i]) + c(i, r[i], loR),
                   abs(preloL - r[i]) + (r[i] - l[i]) + c(i, l[i], loR));
    dp[i][2] =
        min(dp[i][2],
            dp[i - 1][2] + dis +
                min(abs(preloR - l[i]) + (r[i] - l[i]) + c(i, r[i], loR),
                    abs(preloR - r[i]) + (r[i] - l[i]) + c(i, l[i], loR)));
    dp[i][2] =
        min(dp[i][2],
            dp[i - 1][3] + dis +
                min(abs(preupL - l[i]) + (r[i] - l[i]) + c(i, r[i], loR),
                    abs(preupL - r[i]) + (r[i] - l[i]) + c(i, l[i], loR)));
    dp[i][2] =
        min(dp[i][2],
            dp[i - 1][4] + dis +
                min(abs(preupR - l[i]) + (r[i] - l[i]) + c(i, r[i], loR),
                    abs(preupR - r[i]) + (r[i] - l[i]) + c(i, l[i], loR)));
    dp[i][3] = dp[i - 1][1] + dis +
               min(abs(preloL - l[i]) + (r[i] - l[i]) + c(i, r[i], upL),
                   abs(preloL - r[i]) + (r[i] - l[i]) + c(i, l[i], upL));
    dp[i][3] =
        min(dp[i][3],
            dp[i - 1][2] + dis +
                min(abs(preloR - l[i]) + (r[i] - l[i]) + c(i, r[i], upL),
                    abs(preloR - r[i]) + (r[i] - l[i]) + c(i, l[i], upL)));
    dp[i][3] =
        min(dp[i][3],
            dp[i - 1][3] + dis +
                min(abs(preupL - l[i]) + (r[i] - l[i]) + c(i, r[i], upL),
                    abs(preupL - r[i]) + (r[i] - l[i]) + c(i, l[i], upL)));
    dp[i][3] =
        min(dp[i][3],
            dp[i - 1][4] + dis +
                min(abs(preupR - l[i]) + (r[i] - l[i]) + c(i, r[i], upL),
                    abs(preupR - r[i]) + (r[i] - l[i]) + c(i, l[i], upL)));
    dp[i][4] = dp[i - 1][1] + dis +
               min(abs(preloL - l[i]) + (r[i] - l[i]) + c(i, r[i], upR),
                   abs(preloL - r[i]) + (r[i] - l[i]) + c(i, l[i], upR));
    dp[i][4] =
        min(dp[i][4],
            dp[i - 1][2] + dis +
                min(abs(preloR - l[i]) + (r[i] - l[i]) + c(i, r[i], upR),
                    abs(preloR - r[i]) + (r[i] - l[i]) + c(i, l[i], upR)));
    dp[i][4] =
        min(dp[i][4],
            dp[i - 1][3] + dis +
                min(abs(preupL - l[i]) + (r[i] - l[i]) + c(i, r[i], upR),
                    abs(preupL - r[i]) + (r[i] - l[i]) + c(i, l[i], upR)));
    dp[i][4] =
        min(dp[i][4],
            dp[i - 1][4] + dis +
                min(abs(preupR - l[i]) + (r[i] - l[i]) + c(i, r[i], upR),
                    abs(preupR - r[i]) + (r[i] - l[i]) + c(i, l[i], upR)));
    preupL = upL;
    preupR = upR;
    preloL = loL;
    preloR = loR;
    dis = 1;
    ans = min(min(dp[i][1], dp[i][2]), min(dp[i][3], dp[i][4]));
  }
  cout << ans << '\n' << '\n';
}
void db() {
  for (long long i = 1; i <= n; i++) cout << l[i] << " " << r[i] << '\n';
  cout << '\n';
  for (long long i = 1; i <= n; i++)
    cout << lo(l[i]) << " " << up(l[i]) << " " << lo(r[i]) << " " << up(r[i])
         << '\n';
  cout << '\n';
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= 4; j++) cout << dp[i][j] << " ";
    cout << '\n';
  }
  cout << '\n';
}
int32_t main() {
  Varvalian();
  sol();
}
