#include <stdio.h>
struct crime {
int t,w,a;
} cr[12001];
struct intalnire {
int a,b;
} p[8001];
int n,m,K,P,mat[3501][151],drum[151][151],i,j,k,last;
FILE *f;
void cit()
{
int a,b,c;
f=fopen("amenzi.in","r");
fscanf(f,"%d %d %d %d",&n,&m,&K,&P);
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&a,&b,&c);
drum[a][b]=c;
drum[b][a]=c;
}
for(i=1;i<=K;i++)
fscanf(f,"%d %d %d",&cr[i].w, &cr[i].t, &cr[i].a);
for(i=1;i<=P;i++)
fscanf(f,"%d %d",&p[i].a,&p[i].b);
fclose(f);
}
void drumuri()
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) if (i!=j)
for(k=1;k<=n;k++) if (i!=k && j!=k && drum[i][k] && drum[j][k])
if (drum[i][j]==0 || drum[i][j]>drum[i][k]+drum[j][k])
{
drum[i][j]=drum[i][k]+drum[j][k];
drum[j][i]=drum[i][j];
}
}
static int cmp (void * a, void * b)
{
struct crime * aa = (struct crime*) a;
struct crime * bb = (struct crime*) b;
return aa->t - bb->t;
}
void rez()
{
// mat [ time, nod]
last=0;
for(i=2;i<=n;i++) mat[0][i]=-1;
for(i=1;i<=K;i++)
{
for(j=last+1; j<cr[i].t; j++)for(k=1;k<=n;k++) if (mat[j][k]==0)mat[j][k]=mat[j-1][k];
last=cr[i].t-1;
for(j=1;j<=n;j++) if (j!=cr[i].w)
if (cr[i].t>=drum[j][cr[i].w] && mat[cr[i].t-drum[j][cr[i].w]][j]!=-1 && mat[cr[i].t-drum[j][cr[i].w]][j]+cr[i].a > mat[cr[i].t][cr[i].w])
{
mat[cr[i].t][cr[i].w] = mat[cr[i].t-drum[j][cr[i].w]][j]+cr[i].a;
// printf("%d %d %d %d %d %d %d\n",cr[i].t,cr[i].w,cr[i].a,j,drum[j][cr[i].w], mat[cr[i].t-drum[j][cr[i].w]][j], mat[cr[i].t][cr[i].w]);
}
if (mat[cr[i].t-1][cr[i].w] != -1 && mat[cr[i].t][cr[i].w]<mat[cr[i].t-1][cr[i].w]+cr[i].a) mat[cr[i].t][cr[i].w]=mat[cr[i].t-1][cr[i].w]+cr[i].a;
}
}
void scr()
{
int max=0;
f=fopen("amenzi.out","w");
for(i=last;i<=3500;i++)
for(j=1;j<=n;j++) if (mat[i][j]==0)mat[i][j]=mat[i-1][j];
for(i=1;i<=P;i++)
{
max=mat[p[i].b][p[i].a]; if (max==-1) max=0;
for(j=1;j<=n;j++) if (j!=p[i].a)
if (p[i].b>=drum[j][p[i].a] && mat[p[i].b-drum[j][p[i].a]][j]!=-1 && mat[p[i].b-drum[j][p[i].a]][j] > max)
max = mat[p[i].b-drum[j][p[i].a]][j];
fprintf(f,"%d\n",max);
}
fclose(f);
}
int main (void)
{
cit();
drumuri();
qsort(cr+1, K, sizeof(struct crime), cmp);
rez();
scr();
return 0;
}