#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define sz size()
#define nmax 128
#define tmax 4096
#define inf 1000111000
int n,m,k,p;
vector < pair <int,int> > G[nmax];
int A[tmax][nmax],S[tmax][nmax];
int main()
{
FILE *fi=fopen("amenzi.in","r"),*fo=fopen("amenzi.out","w");
fscanf(fi,"%d %d %d %d",&n,&m,&k,&p);
int i,j,a,b,c;
FOR(i,0,m)
{
fscanf(fi,"%d %d %d",&a,&b,&c);
a--,b--;
G[a].pb(mp(b,c));
G[b].pb(mp(a,c));
}
FOR(i,0,k)
{
fscanf(fi,"%d %d %d",&a,&b,&c);
a--;
S[b][a]+=c;
}
FOR(i,0,tmax) FOR(j,0,n)
{
A[i][j]=0+(!i&&!j);
if(i)
A[i][j]=A[i-1][j];
FOR(a,0,G[j].sz)
if(i>=G[j][a].s&&A[i-G[j][a].s][G[j][a].f])
{
A[i][j]>?=A[i-G[j][a].s][G[j][a].f];
}
if(A[i][j])
A[i][j]+=S[i][j];
}
FOR(i,0,p)
{
fscanf(fi,"%d %d",&a,&b);
a--;
fprintf(fo,"%d\n",A[b][a]-1);
}
fclose(fi);
fclose(fo);
return 0;
}