#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
using vi = vector<int>;
using pii = pair<int, int>;
using ll = long long;
using pll = pair<ll, ll>;
#define ff first
#define ss second
const int MAXN = 2e3 + 7;
ll tab[MAXN + 100][3];
string ans[(int)1e5 + 100];
int rep[MAXN + 100]; //kolejne sciazny to MAXN, MAXN + 1, MAXN + 2, MAXN + 3
int find(int v) {
if (rep[v] == v) return rep[v];
return rep[v] = find(rep[v]);
}
void onion(int a, int b) {
a = find(a);
b = find(b);
rep[a] = b;
}
ll odl(pll a, pll b) {
return sqrtl((a.ff - b.ff) * (a.ff - b.ff) + (a.ss - b.ss) * (a.ss - b.ss));
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
ll w, h;
cin >> w >> h;
ll x, y, r;
for (int i = 0; i < n; i++) {
cin >> tab[i][0] >> tab[i][1] >> tab[i][2];
}
vector<pair<pii, ll>> kraw;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
kraw.push_back({{i, j}, odl({tab[i][0], tab[i][1]}, {tab[j][0], tab[j][1]}) - tab[i][2] - tab[j][2]});
}
kraw.push_back({{MAXN, i}, tab[i][0] - tab[i][2]});
kraw.push_back({{MAXN + 1, i}, tab[i][1] - tab[i][2]});
kraw.push_back({{MAXN + 2, i}, w - tab[i][0] - tab[i][2]});
kraw.push_back({{MAXN + 3, i}, h - tab[i][1] - tab[i][2]});
}
for (int i = 0; i < MAXN + 10; i++) rep[i] = i;
sort(kraw.begin(), kraw.end(), [&](pair<pii, ll> & a, pair<pii, ll> & b){return a.ss < b.ss;});
vector<pair<pii, int>> zap(q);
for (int i = 0; i < q; i++) {
cin >> zap[i].ff.ff >> zap[i].ff.ss;
zap[i].ss = i;
}
sort(zap.begin(), zap.end());
int wsk = 0;
for (int z = 0; z < q; z++) {
ll e = zap[z].ff.ss;
r = zap[z].ff.ff;
while (wsk < kraw.size() && kraw[wsk].ss < 2 * r) {
onion(kraw[wsk].ff.ff, kraw[wsk].ff.ss);
wsk++;
}
int rep2[4] = {find(MAXN), find(MAXN + 1), find(MAXN + 2), find(MAXN + 3)};
e--;
vi git(4, 1);
if (rep2[e] == rep2[(e + 1) % 4]) {
for (int i = 0; i < 4; i++) {
if (e != i) git[i] = 0;
}
}
else {
for (int i = 0; i < 4; i++) {
if (rep2[i] == rep2[(i + 1) % 4]) git[i] = 0;
}
if (rep2[e] == rep2[(e + 2) % 4]) {
git[(e + 2) % 4] = 0;
git[(e + 3) % 4] = 0;
}
if (rep2[(e + 1) % 4] == rep2[(e + 3) % 4]) {
git[(e + 1) % 4] = 0;
git[(e + 2) % 4] = 0;
}
}
for (int i = 0; i < 4; i++) if (git[i]) ans[zap[z].ss] += to_string(i + 1);
//cout << find(MAXN) << ' ' << find(MAXN + 1) << ' ' << find(MAXN + 2) << ' ' << find(MAXN + 3) << '\n';
}
for (int i = 0; i < q; i++) cout << ans[i] << '\n';
return 0;
}
//