#include <bits/stdc++.h>
using namespace std;
const long long LL_INF = (long long)2e18 + 5;
int N, M, K, Q;
vector<pair<int, int>> treasures;
vector<int> safe;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N >> M >> K >> Q;
  treasures.resize(K);
  for (pair<int, int> &t : treasures) cin >> t.first >> t.second;
  treasures.emplace_back(1, 1);
  K++;
  sort(treasures.begin(), treasures.end());
  safe.resize(Q);
  for (int &s : safe) cin >> s;
  sort(safe.begin(), safe.end());
  map<int, long long> col_options;
  col_options[1] = 0;
  int current_row = 1;
  long long answer = LL_INF;
  for (int i = 0, j = 0; i < K; i = j) {
    while (j < K && treasures[i].first == treasures[j].first) j++;
    int row = treasures[i].first;
    int left_col = treasures[i].second, right_col = treasures[j - 1].second;
    for (auto &op : col_options) op.second += row - current_row;
    current_row = row;
    map<int, long long> minimums;
    minimums[left_col] = minimums[right_col] = LL_INF;
    for (auto &op : col_options) {
      minimums[left_col] =
          min(minimums[left_col], op.second + abs(op.first - right_col) +
                                      abs(right_col - left_col));
      minimums[right_col] =
          min(minimums[right_col],
              op.second + abs(op.first - left_col) + abs(left_col - right_col));
    }
    answer = min(minimums[left_col], minimums[right_col]);
    col_options.clear();
    for (auto &mn : minimums) {
      int safe_index =
          lower_bound(safe.begin(), safe.end(), mn.first) - safe.begin();
      int safe_col = safe[safe_index];
      long long cost = mn.second + abs(mn.first - safe_col);
      if (col_options.find(safe_col) == col_options.end() ||
          cost < col_options[safe_col])
        col_options[safe_col] = cost;
      if (safe_index > 0) {
        safe_index--;
        safe_col = safe[safe_index];
        cost = mn.second + abs(mn.first - safe_col);
        if (col_options.find(safe_col) == col_options.end() ||
            cost < col_options[safe_col])
          col_options[safe_col] = cost;
      }
    }
  }
  cout << answer << '\n';
}
