#include <bits/stdc++.h>
using namespace std;
vector<long long> t[200005];
set<long long> s;
void id(long long x, map<long long, long long> &m, long long y) {
  auto it = s.lower_bound(x);
  if (it != s.end()) {
    long long x1 = *it;
    if (m.count(x1) == 0) {
      m[x1] = y + abs(x - x1);
    } else {
      m[x1] = min(y + abs(x - x1), m[x1]);
    }
    if (s.begin() != it) it--;
  } else
    it--;
  long long x1 = *it;
  if (m.count(x1) == 0) {
    m[x1] = y + abs(x - x1);
  } else {
    m[x1] = min(y + abs(x - x1), m[x1]);
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, k, q;
  cin >> n >> m >> k >> q;
  for (long long i = 0; i < k; i++) {
    long long r, c;
    cin >> r >> c;
    t[r].push_back(c);
  }
  for (long long i = 0; i < q; i++) {
    long long c;
    cin >> c;
    s.insert(c);
  }
  for (long long i = 1; i <= n; i++) {
    sort(t[i].begin(), t[i].end());
  }
  vector<pair<long long, long long>> tem;
  if (t[1].size() == 0) {
    long long x = *s.begin();
    tem.push_back({x, x - 1});
  } else {
    long long c = t[1].back();
    auto it = s.lower_bound(c);
    if (it == s.end()) {
      it--;
      tem.push_back({*it, t[1].back() - 1 + abs(*it - t[1].back())});
    } else {
      tem.push_back({*it, t[1].back() - 1 + abs(*it - t[1].back())});
      if (it != s.begin()) {
        it--;
        tem.push_back({*it, t[1].back() - 1 + abs(*it - t[1].back())});
      }
    }
  }
  for (long long j = n; j >= 1; j--) {
    if (t[j].size()) {
      n = j;
      break;
    }
  }
  for (long long i = 2; i < n; i++) {
    map<long long, long long> m;
    sort(tem.begin(), tem.end());
    if (t[i].size() == 0) {
      continue;
    }
    for (auto j : tem) {
      id(t[i].back(), m,
         j.second + abs(j.first - t[i][0]) + abs(t[i].back() - t[i][0]));
      id(t[i][0], m,
         j.second + abs(j.first - t[i].back()) + abs(t[i].back() - t[i][0]));
    }
    tem.clear();
    for (auto &j : m) {
      tem.push_back({j.first, j.second});
    }
  }
  if (n == 1) {
    cout << t[1].back() - 1;
    exit(0);
  }
  vector<long long> ans;
  for (auto j : tem) {
    ans.push_back(j.second + abs(j.first - t[n][0]) +
                  abs(t[n].back() - t[n][0]));
    ans.push_back(j.second + abs(j.first - t[n].back()) +
                  abs(t[n].back() - t[n][0]));
  }
  sort(ans.begin(), ans.end());
  cout << ans[0] + n - 1;
}
