#include <bits/stdc++.h>
#define ld long double
using namespace std;
const int N = 2e3 + 5, Q = 1e5 + 5;
int n, q, lw, tw, rw, bw;
string ans[Q];
ld h, w, x[N], y[N], r[N];
vector<tuple<ld, int, int>> a;
tuple<ld, int, int> qrs[Q];
ld dist(int i, int j){
return sqrtl((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
}
struct DSU{
int pa[N];
void init(){
for(int i = 0;i<N;i++) pa[i] = i;
}
int find(int u){
if(u == pa[u]) return u;
return pa[u] = find(pa[u]);
}
void unite(int u, int v){
u = find(u), v = find(v);
pa[v] = u;
}
}dsu;
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> q >> w >> h;
lw = n + 1, tw = n + 2, rw = n + 3, bw = n + 4;
for(int i = 1;i<=n;i++) cin >> x[i] >> y[i] >> r[i];
for(int i = 1;i<=n;i++) for(int j = i + 1;j<=n;j++) a.push_back({dist(i, j) - r[i] - r[j], i, j});
for(int i = 1;i<=n;i++) a.push_back({x[i] - r[i], i, lw});
for(int i = 1;i<=n;i++) a.push_back({y[i] - r[i], i, bw});
for(int i = 1;i<=n;i++) a.push_back({h - y[i] - r[i], i, tw});
for(int i = 1;i<=n;i++) a.push_back({w - x[i] - r[i], i, rw});
sort(a.begin(), a.end());
for(int i = 1;i<=q;i++){
auto &[rr, st, id] = qrs[i];
cin >> rr >> st;
id = i;
}
sort(qrs + 1, qrs + q + 1);
dsu.init();
int ptr = 0;
for(int i = 1;i<=q;i++){
auto [rr, st, id] = qrs[i];
while(ptr < a.size() && get<0>(a[ptr]) < 2.0L * rr){
dsu.unite(get<1>(a[ptr]), get<2>(a[ptr]));
++ptr;
}
if(st == 1){
ans[id] += '1';
if(dsu.find(lw) == dsu.find(bw)) continue;
if(dsu.find(tw) != dsu.find(bw) && dsu.find(bw) != dsu.find(rw)) ans[id] += '2';
if(dsu.find(tw) != dsu.find(bw) && dsu.find(lw) != dsu.find(rw) && dsu.find(tw) != dsu.find(rw)) ans[id] += '3';
if(dsu.find(lw) != dsu.find(rw) && dsu.find(lw) != dsu.find(tw)) ans[id] += '4';
}else if(st == 2){
ans[id] += '2';
if(dsu.find(bw) == dsu.find(lw)) continue;
if(dsu.find(tw) != dsu.find(bw) && dsu.find(lw) != dsu.find(bw)) ans[id] += '1';
if(dsu.find(tw) != dsu.find(bw) && dsu.find(lw) != dsu.find(rw) && dsu.find(lw) != dsu.find(tw)) ans[id] += '4';
if(dsu.find(lw) != dsu.find(rw) && dsu.find(tw) != dsu.find(rw)) ans[id] += '3';
}else if(st == 3){
ans[id] += '3';
if(dsu.find(tw) == dsu.find(rw)) continue;
if(dsu.find(lw) != dsu.find(rw) && dsu.find(bw) != dsu.find(rw)) ans[id] += '2';
if(dsu.find(lw) != dsu.find(rw) && dsu.find(tw) != dsu.find(bw) && dsu.find(bw) != dsu.find(lw)) ans[id] += '1';
if(dsu.find(tw) != dsu.find(bw) && dsu.find(lw) != dsu.find(tw)) ans[id] += '4';
}else{
ans[id] += '4';
if(dsu.find(lw) == dsu.find(tw)) continue;
if(dsu.find(tw) != dsu.find(bw) && dsu.find(tw) != dsu.find(rw)) ans[id] += '3';
if(dsu.find(tw) != dsu.find(bw) && dsu.find(lw) != dsu.find(rw) && dsu.find(bw) != dsu.find(rw)) ans[id] += '2';
if(dsu.find(lw) != dsu.find(rw) && dsu.find(lw) && dsu.find(bw)) ans[id] += '1';
}
}
for(int i = 1;i<=q;i++) sort(ans[i].begin(), ans[i].end()), cout << ans[i] << '\n';
}