#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
const int NMAX = 151;
const int INFI = 1<<28;
const int EMAX = 20000; //Numarul maxim de evenimente
int mat[NMAX][NMAX];
int ans[8001];
class event {
public:
int t, a, s; //Daca e intalnire cu nevasta s < 0
event() {
}
event(int x, int y, int z) {
t = x;
a = y;
s = z;
}
}v[EMAX + 1];
struct cmpByTime {
bool operator()(const event a, const event b) {
if (a.t == b.t) {
return a.s > b.s ? true: false;
}
return a.t < b.t ? true: false;
}
};
struct cmpByProfit { //Folosit
bool operator()(const event a, const event b) {
return a.s > b.s;
}
};
set<event, cmpByProfit>s;
int main() {
FILE *fin = fopen ("amenzi.in", "r");
FILE *fout= fopen ("amenzi.out", "w");
int N, M, K, P, i, j, k;
fscanf (fin, "%d %d %d %d", &N, &M, &K, &P);
for (i = 1; i <= N; ++i) {
for (j = 1; j <= N; ++j) {
mat[i][j] = INFI;
}
mat[i][i] = 0;
}
while (M--) {
int a, b, c;
fscanf (fin, "%d %d %d", &a, &b, &c);
if (mat[a][b] > c) {
mat[a][b] = c;
mat[b][a] = c;
}
}
//Floyd - Warshall
for (k = 1; k <= N; ++k) {
for (i = 1; i <= N; ++i) {
for (j = 1; j <= N; ++j) {
if (mat[i][k] + mat[k][j] < mat[i][j]) {
mat[i][j] = mat[i][k] + mat[k][j];
}
}
}
}
//Citesc restul datelor
for (i = 0; i < K; ++i) {
fscanf (fin, "%d %d %d", &v[i].a, &v[i].t, &v[i].s);
}
for (i = 0; i < P; ++i) {
fscanf (fin, "%d %d", &v[i + K].a, &v[i + K].t);
v[i + K].s = -(i + 1);
}
//
v[K + P] = event(0, 1, 0);
sort(v, v + K + P + 1, cmpByTime());
//
s.insert(event(0, 1, 0));
for (i = 1; i <= K + P; ++i) {
// printf ("Processing (%d, %d, %d)\n", v[i].a, v[i].t, v[i].s);
int totalSum = -1;
set<event>::iterator it;
for (it = s.begin(); it != s.end() && totalSum == -1; ++it) {
if (it->t + mat[it->a][v[i].a] <= v[i].t) {
totalSum = it->s;
// printf ("From %d, %d, %d to %d, %d\n", it->t, it->a, it->s, v[i].a, v[i].t);
}
}
if (v[i].s > 0) {
if (totalSum > -1) {
// printf ("Add %d, %d, %d\n", v[i].t, v[i].a, v[i].s + totalSum);
s.insert(event(v[i].t, v[i].a, v[i].s + totalSum));
}
} else {
ans[-(v[i].s)] = totalSum;
}
}
for (i = 1; i <= P; ++i) {
fprintf (fout, "%d\n", ans[i]);
}
fclose(fout);
return 0;
}