#include <bits/stdc++.h>
using namespace std;
using INT = long long;
using pii = pair<int, INT>;
vector<int> res[200010];
vector<int> good;
int calc_left(int u) {
  if (good.size() == 0) return 0;
  if (good[0] > u) return 0;
  int id = upper_bound(good.begin(), good.end(), u) - good.begin();
  return good[id - 1];
}
int calc_right(int u) {
  if (good.size() == 0) return 0;
  if (good.back() < u) return 0;
  int id = lower_bound(good.begin(), good.end(), u) - good.begin();
  return good[id];
}
INT calc(vector<pii> &vec, int pos) {
  INT ma = 0x3f3f3f3f3f3f3f3f;
  for (auto p : vec) {
    ma = min(ma, p.second + abs(p.first - pos));
  }
  return ma;
}
int main() {
  int n, m, k, q;
  cin >> n >> m >> k >> q;
  int MA = 0;
  for (int i = 1; i <= k; i++) {
    int r, c;
    scanf("%d %d", &r, &c);
    res[r].push_back(c);
    MA = max(MA, r);
  }
  for (int i = 1; i < 200010; i++) sort(res[i].begin(), res[i].end());
  for (int i = 1; i <= q; i++) {
    int first;
    scanf("%d", &first);
    good.push_back(first);
  }
  sort(good.begin(), good.end());
  vector<pii> ans;
  int first;
  if (res[1].size())
    first = 1;
  else
    first = calc_right(1);
  ans.push_back(pii(first, first - 2));
  INT tot = 0x3f3f3f3f3f3f3f3f;
  for (int i = 1; i <= MA; i++) {
    vector<pii> vec;
    for (auto p : ans) {
      vec.push_back(pii(p.first, p.second + 1));
    }
    ans = vec;
    vec.clear();
    if (!res[i].size()) continue;
    int l, r;
    int st = res[i][0], ed = res[i].back();
    INT first = calc(ans, ed) + abs(ed - st);
    if (i == MA) tot = min(tot, first);
    l = calc_left(st);
    if (l) vec.push_back(pii(l, first + abs(l - st)));
    r = calc_right(st);
    if (r) vec.push_back(pii(r, first + abs(r - st)));
    first = calc(ans, st) + abs(ed - st);
    if (i == MA) tot = min(tot, first);
    l = calc_left(ed);
    if (l) vec.push_back(pii(l, first + abs(l - ed)));
    r = calc_right(ed);
    if (r) vec.push_back(pii(r, first + abs(r - ed)));
    ans = vec;
  }
  cout << tot << endl;
  return 0;
}
