#include<stdio.h>
int n, m, k, p;
int q, u, Q, U;
int x[151][151], nr[151];
int CO[1000][4];
FILE *g=fopen("amenzi.out", "w"), *f=fopen("amenzi.in", "r");
void inserare(int a, int t, int co[1000][3])
{
int poz, l;
u++;
poz=u-1;
while(poz>q && t<co[poz][2])
{
l=poz+1;
co[l][1]=co[poz][1];
co[l][2]=co[poz][2];
poz--;
}
poz++;
co[poz][1]=a;
co[poz][2]=t;
}
int verif(int a, int b, int c)
{
int co[1000][3];
int ok=1, t, sel[151], i;
q=u=1;
co[q][1]=a;
co[q][2]=0;
for(i=1; i<=n; i++)
sel[i]=0;
while(ok && q<=u)
{
int i;
int newa, newt;
a=co[q][1];
t=co[q][2];
for(i=1; i<=n && ok; i++)
if(x[i][a]!=-1 && sel[i]==0)
{
newa=i;
newt=t+x[i][a];
if(sel[i]==0)
{
sel[i]=1;
inserare(newa, newt, co);
}
if(newa==b)
{
ok=0;
if(newt<=c)
return 1;
else
return 0;
}
}
q++;
}
return 0;
}
void insert(int a, int b, int c)
{
int poz, l;
U++;
poz=U-1;
while(poz>Q && b>CO[poz][2])
{
l=poz+1;
CO[l][1]=CO[poz][1];
CO[l][2]=CO[poz][2];
CO[l][3]=CO[poz][3];
poz--;
}
poz++;
CO[poz][1]=a;
CO[poz][2]=b;
CO[poz][3]=c;
}
void calcul_amenda(int X, int y, int timp[151][151], int amenda[151][151])
{
int nod, am, T, i, amen, tim;
int ok;
CO[1][1]=1;
CO[1][2]=0;
CO[1][3]=0;
Q=U=1;
ok=1;
while(ok && Q<=U)
{
nod=CO[Q][1];
am=CO[Q][2];
T=CO[Q][3];
for(i=1; i<=n; i++)
{
if(x[nod][i]!=-1)
{
if(amenda[i][nr[i]]!=0)
{
nr[i]=1;
while(timp[i][nr[i]])
{
if(T+x[nod][i]<=timp[i][nr[i]])
{
tim=timp[i][nr[i]];
amen=am+amenda[i][nr[i]];
if(verif(i, X, y-tim))
{
insert(i, amen, tim);
ok=1;
}
else
ok=0;
}
else
ok=0;
nr[i]++;
}
}
}
}
Q++;
}
if(ok==0)
fprintf(g, "%d\n", CO[Q-1][2]);
else
fprintf(g, "-1\n");
}
void citire()
{
int i, j, a, b, c;
int timp[151][151], amenda[151][151];
fscanf(f, "%d", &n);
fscanf(f, "%d%d%d", &m, &k, &p);
for(i=1; i<=m; i++)
for(j=1; j<=m; j++)
x[i][j]=x[j][i]=-1;
for(i=1; i<=m; i++)
{
fscanf(f, "%d%d%d", &a, &b, &c);
x[a][b]=x[b][a]=c;
}
for(i=1; i<=n; i++)
nr[i]=1;
for(i=1; i<=k; i++)
{
fscanf(f, "%d%d%d", &a, &b, &c);
timp[a][nr[a]]=b;
amenda[a][nr[a]]=c;
nr[a]++;
}
for(i=1; i<=n; i++)
nr[i]=1;
for(i=1; i<=p; i++)
{
fscanf(f, "%d%d", &a, &b);
calcul_amenda(a, b, timp, amenda);
for(j=1; j<=n; j++)
nr[j]=1;
for(j=1; j<=k; j++)
{
CO[j][1]=0;
CO[j][2]=0;
CO[j][3]=0;
}
}
}
int main()
{
citire();
fclose(f);
fclose(g);
return 0;
}