#include <bits/stdc++.h>
using namespace std;
void re(int& x);
template <class T, class... Ts>
void re(T& t, Ts&... ts);
void pr(int x);
void pr(const char* x);
void ps();
template <class T, class... Ts>
void ps(const T& t, const Ts&... ts);
int e, s, n, m;
int query[210000];
pair<int, int> sta[210000];
vector<pair<int, int> > ev;
pair<int, int> ans[210000];
int has[10];
void solve() {
  re(e, s, n, m);
  for (int i = 0; i < (n); ++i) re(sta[i].first, sta[i].second);
  for (int i = 0; i < (m); ++i) re(query[i]);
  for (int i = 0; i < (n); ++i) {
    ev.emplace_back(max(-e, -sta[i].second - s), sta[i].first);
    ev.emplace_back(max(-e, -sta[i].second), -sta[i].first);
  }
  for (int i = 0; i < (m); ++i) {
    ev.emplace_back(max(-e, -query[i] - s), i + 200);
  }
  sort((ev).begin(), (ev).end());
  pair<int, int> cur = {0, 0};
  int la = -e;
  for (pair<int, int> p : ev) {
    if (p.first != la) {
      if (has[3]) {
      } else if (has[2] && cur.first != -1)
        cur.second += (p.first - la);
      else if (has[1] && cur.first != -1)
        cur.first += (p.first - la);
      else
        cur = {-1, -1};
    }
    la = p.first;
    if (p.second < 200) {
      if (p.second < 0)
        has[(-p.second)]--;
      else
        has[p.second]++;
    } else {
      ans[p.second - 200] = cur;
    }
  }
  for (int i = 0; i < (m); ++i) ps(ans[i].first, ans[i].second);
}
int main() { solve(); }
void re(int& x) { scanf("%d", &x); }
template <class T, class... Ts>
void re(T& t, Ts&... ts) {
  re(t);
  re(ts...);
}
void pr(int x) { printf("%d", x); }
void pr(const char* x) { printf("%s", x); }
void ps() { pr("\n"); }
template <class T, class... Ts>
void ps(const T& t, const Ts&... ts) {
  pr(t);
  if (sizeof...(ts)) pr(" ");
  ps(ts...);
}
