#include <bits/stdc++.h>
using namespace std;
long long n, m, k, q, i;
const int N = 2e5 + 5;
long long r[N], c[N];
vector<vector<long long> > row(N);
long long finans;
long long leftans[N], rightans[N];
long long leftcol, rightcol, prevrow;
set<long long> s;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k >> q;
  for (i = 1; i <= k; i++) {
    cin >> r[i] >> c[i];
    row[r[i]].push_back(c[i]);
  }
  for (i = 1; i <= n; i++) sort(row[i].begin(), row[i].end());
  for (i = 1; i <= q; i++) {
    int first;
    cin >> first;
    s.insert(first);
  }
  if (row[1].size() == 0) {
    leftcol = 1, rightcol = 1;
  } else {
    leftcol = row[1][0];
    rightcol = row[1][row[1].size() - 1];
    leftans[1] = rightcol - 1 + (rightcol - leftcol);
    rightans[1] = rightcol - 1;
  }
  prevrow = 1;
  finans = min(leftans[1], rightans[1]);
  for (i = 2; i <= n; i++) {
    leftans[i] = 1e18, rightans[i] = 1e18;
  }
  for (i = 2; i <= n; i++) {
    if (row[i].size() == 0) continue;
    set<long long>::iterator it;
    it = s.lower_bound(leftcol);
    if (it != s.end()) {
      int val;
      val = *it;
      leftans[i] = (i - prevrow) + abs(val - leftcol) +
                   abs(val - row[i][row[i].size() - 1]) +
                   abs(row[i][0] - row[i][row[i].size() - 1]) +
                   leftans[prevrow];
      rightans[i] = (i - prevrow) + abs(val - leftcol) + abs(val - row[i][0]) +
                    abs(row[i][0] - row[i][row[i].size() - 1]) +
                    leftans[prevrow];
    }
    if (it != s.begin()) {
      it--;
      int val;
      val = *it;
      leftans[i] =
          min(leftans[i], (i - prevrow) + abs(val - leftcol) +
                              abs(val - row[i][row[i].size() - 1]) +
                              abs(row[i][0] - row[i][row[i].size() - 1]) +
                              leftans[prevrow]);
      rightans[i] = min(
          rightans[i],
          (i - prevrow) + abs(val - leftcol) + abs(val - row[i][0]) +
              abs(row[i][0] - row[i][row[i].size() - 1]) + leftans[prevrow]);
    }
    it = s.lower_bound(rightcol);
    if (it != s.end()) {
      int val;
      val = *it;
      leftans[i] =
          min(leftans[i], (i - prevrow) + abs(val - rightcol) +
                              abs(val - row[i][row[i].size() - 1]) +
                              abs(row[i][0] - row[i][row[i].size() - 1]) +
                              rightans[prevrow]);
      rightans[i] = min(
          rightans[i],
          (i - prevrow) + abs(val - rightcol) + abs(val - row[i][0]) +
              abs(row[i][0] - row[i][row[i].size() - 1]) + rightans[prevrow]);
    }
    if (it != s.begin()) {
      it--;
      int val;
      val = *it;
      leftans[i] =
          min(leftans[i], (i - prevrow) + abs(val - rightcol) +
                              abs(val - row[i][row[i].size() - 1]) +
                              abs(row[i][0] - row[i][row[i].size() - 1]) +
                              rightans[prevrow]);
      rightans[i] = min(
          rightans[i],
          (i - prevrow) + abs(val - rightcol) + abs(val - row[i][0]) +
              abs(row[i][0] - row[i][row[i].size() - 1]) + rightans[prevrow]);
    }
    leftcol = row[i][0];
    rightcol = row[i][row[i].size() - 1];
    prevrow = i;
    finans = min(leftans[i], rightans[i]);
  }
  cout << finans;
  return 0;
}
