#include <stdio.h>
#include <string.h>
int aux,vecin,tnou,n,m,k,p,am[150][3501],gr[150],v[150][150],timp[150][150];
long int a[150][3501];
int max(int a, int b)
{
if (a>b) return a;
else return b;
}
int main()
{
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&k,&p);
memset(am,0,sizeof(am));
memset(gr,0,sizeof(gr));
for (int q=0;q<m;q++)
{
int i,j,t;
scanf("%d %d %d",&i,&j,&t);
i--; j--;
v[i][gr[i]]=j;
timp[i][gr[i]]=t;
gr[i]++;
v[j][gr[j]]=i;
timp[j][gr[j]]=t;
gr[j]++;
}
for (int q=0;q<k;q++)
{
int i,t,val;
scanf("%d %d %d",&i,&t,&val);
am[i-1][t]+=val;
}
for (int t=0;t<3500;t++)
for (int i=0;i<n;i++) a[i][t]=-1;
a[0][0]=0;
for (int t=0;t<3500;t++)
for (int i=0;i<n;i++)
if (a[i][t]>=0)
{
aux=a[i][t]+am[i][t];
a[i][t+1]=max(a[i][t+1],aux);
for (int k=0;k<gr[i];k++)
{
vecin=v[i][k];
tnou=t+timp[i][k];
if (tnou<=3500) a[vecin][tnou]=max(a[vecin][tnou],aux);
}
}
for (int q=0;q<p;q++)
{
int i,t;
scanf("%d %d",&i,&t);
printf("%d\n",a[i-1][t]);
}
fclose(stdout);
return 0;
}