#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
vector<int> v[N];
long long memo[N];
void solve() {
  int n, m, k, q;
  scanf("%d %d %d %d", &n, &m, &k, &q);
  for (int i = 0; i < k; ++i) {
    int r, c;
    scanf("%d %d", &r, &c);
    v[r].push_back(c);
  }
  for (int i = 1; i <= n; ++i) {
    sort(v[i].begin(), v[i].end());
  }
  set<int> up;
  for (int i = 0; i < q; ++i) {
    int x;
    scanf("%d", &x);
    up.insert(x);
  }
  if (v[1].size() == 0) {
    v[1].push_back(1);
  }
  int lastRow = 1;
  vector<pair<int, long long> > dp[2];
  dp[0].push_back(make_pair(1, 0LL));
  int bit = 0;
  long long lastDp = 0;
  for (int row = 1; row <= n; ++row) {
    if (v[row].size() == 0) {
      continue;
    }
    int vleft = v[row][0], vright = v[row].back();
    int nbit = bit ^ 1;
    dp[nbit].clear();
    const long long inf = 1e18;
    memo[vleft] = inf;
    memo[vright] = inf;
    for (int i = 0; i < dp[bit].size(); ++i) {
      int col = dp[bit][i].first;
      long long val = dp[bit][i].second + row - lastRow;
      if (vleft <= col && col <= vright) {
        long long diff = vright - vleft;
        memo[vright] = min(memo[vright], diff + val + col - vleft);
        memo[vleft] = min(memo[vleft], diff + val + vright - col);
      } else if (col < vleft) {
        memo[vright] = min(memo[vright], val + vright - col);
      } else if (vright < col) {
        memo[vleft] = min(memo[vleft], val + col - vleft);
      } else {
        assert(0);
      }
    }
    lastDp = min(memo[vleft], memo[vright]);
    int ar[2];
    int sz = 0;
    ar[sz++] = vleft;
    if (vleft != vright) {
      ar[sz++] = vright;
    }
    for (int i = 0; i < sz; ++i) {
      int col = ar[i];
      if (memo[col] == inf) {
        continue;
      }
      set<int>::iterator it = up.lower_bound(col + 1);
      if (it != up.begin()) {
        it = prev(it);
        dp[nbit].push_back(make_pair(*it, abs(*it - col) + memo[col]));
      }
      it = up.lower_bound(col);
      if (it != up.end()) {
        dp[nbit].push_back(make_pair(*it, abs(*it - col) + memo[col]));
      }
    }
    lastRow = row;
    bit = nbit;
  }
  printf("%lld\n", lastDp);
}
int main() { solve(); }
