#include <bits/stdc++.h>
using namespace std;
const int maxN = 100010;
int n, m, k, q;
vector<int> G[maxN];
int pre[maxN], s[maxN], e[maxN], cnt[maxN], t;
bool nroot[maxN];
void dfs(int cur) {
  s[cur] = ++t;
  cnt[cur] = 1;
  for (int i = 0; i < (int)G[cur].size(); i++) {
    int nxt = G[cur][i];
    dfs(nxt);
    cnt[cur] += cnt[nxt];
  }
  e[cur] = t;
}
int main(int argc, char** argv) {
  cin >> n >> m >> k >> q;
  int a, b;
  for (int i = 0; i < k; i++) {
    cin >> a >> b;
    if (pre[b]) {
      G[pre[b]].push_back(a);
      nroot[a] = true;
    }
    pre[b] = a;
  }
  for (int i = 1; i <= n; i++) {
    if (!nroot[i]) dfs(i);
  }
  for (int i = 0; i < q; i++) {
    cin >> a >> b;
    cout << ((s[a] < s[pre[b]] && e[a] >= e[pre[b]]) ? cnt[a] : 0) << '\n';
  }
  return 0;
}
