#include <bits/stdc++.h>
using namespace std;
int R, C, k, s;
vector<int> rows;
vector<vector<int> > at;
vector<vector<long long> > dp;
vector<int> safe;
long long calc(int r, int idx) {
  int c = at[r][idx];
  long long &ret = dp[r][idx];
  if (ret != -1) return ret;
  int s = at[r][0];
  int e = at[r].back();
  if (r == rows.back()) return ret = min(c - s, e - c) + e - s;
  ret = 1e18;
  for (int it = 0; it < 2; ++it) {
    long long o1 = e - c + e - s;
    int H = 0;
    if (it) {
      o1 = c - s + e - s;
      H = at[r].size() - 1;
    }
    int slidx = upper_bound(safe.begin(), safe.end(), at[r][H]) - safe.begin();
    for (int dx = -1; dx <= 0; ++dx) {
      int ccidx = slidx + dx;
      if (ccidx != -1 && ccidx != safe.size()) {
        int sl = safe[ccidx];
        long long cur = o1 + abs(at[r][H] - sl);
        int nr = *upper_bound(rows.begin(), rows.end(), r);
        int nidx =
            lower_bound(at[nr].begin(), at[nr].end(), sl) - at[nr].begin();
        if (nidx == at[nr].size()) --nidx;
        int nc = at[nr][nidx];
        long long cur2 = cur + abs(nc - sl) + nr - r;
        ret = min(ret, cur2 + calc(nr, nidx));
        if (nidx) {
          --nidx;
          int nc = at[nr][nidx];
          long long cur2 = cur + abs(nc - sl) + nr - r;
          ret = min(ret, cur2 + calc(nr, nidx));
        }
      }
    }
  }
  return ret;
}
int main() {
  cin >> R >> C >> k >> s;
  at.resize(R);
  for (int i = 0; i < k; ++i) {
    int r, c;
    scanf("%d%d", &r, &c);
    --r;
    --c;
    at[r].push_back(c);
  }
  if (at[0].empty())
    at[0].push_back(0);
  else if (find(at[0].begin(), at[0].end(), 0) == at[0].end())
    at[0].push_back(0);
  for (int i = 0; i < R; ++i)
    if (!at[i].empty()) {
      rows.push_back(i);
      sort(at[i].begin(), at[i].end());
    }
  safe.resize(s);
  for (int i = 0; i < s; ++i) {
    scanf("%d", &safe[i]);
    --safe[i];
  }
  sort(safe.begin(), safe.end());
  dp.resize(R);
  for (int i = 0; i < at.size(); ++i) dp[i].resize(at[i].size(), -1);
  printf("%lld\n", calc(0, 0));
  return 0;
}
