#include <bits/stdc++.h>
using namespace std;
const int maxn = 110000;
int n, m, k, q;
int tab[maxn];
int info[maxn], now;
struct Tedge {
  int v, next;
} edge[maxn];
int inde[maxn];
void add(int u, int v) {
  edge[++now] = (Tedge){v, info[u]};
  info[u] = now;
  inde[v]++;
}
int l[maxn], r[maxn], id[maxn], sz[maxn], cnt;
void dfs(int u, int fa) {
  l[u] = r[u] = id[u] = ++cnt;
  sz[u] = 1;
  int i, v;
  for (int i = info[u], v = edge[i].v; i; i = edge[i].next, v = edge[i].v) {
    dfs(v, u);
    l[u] = min(l[u], l[v]);
    r[u] = max(r[u], r[v]);
    sz[u] += sz[v];
  }
}
int main() {
  scanf("%d%d%d%d", &n, &m, &k, &q);
  for (int i = (1); i <= (k); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (tab[b]) add(tab[b], a);
    tab[b] = a;
  }
  for (int i = (1); i <= (n); i++)
    if (!inde[i]) dfs(i, 0);
  while (q--) {
    int u, v;
    scanf("%d%d", &u, &v);
    if (!tab[v]) {
      puts("0");
      continue;
    }
    v = tab[v];
    if (l[u] <= id[v] && id[v] <= r[u])
      printf("%d\n", sz[u]);
    else
      puts("0");
  }
}
