For(i,ud) if (!(ask[i].y
int head=1,tail=1;d[q[1]=1]=0;
while (head<=tail)
{
int now=q[head];
Forp(now)
{
int v=edge[p];
if (!b[v]&&d[v]>d[now]+weight[p])
{
d[v]=d[now]+weight[p];
q[++tail]=v;
}
}
head++;
}
}
int f[MAXN];
int main()
{
// freopen("bzoj1003.in","r",stdin);
scanf("%d%d%d%d",&day,&n,&k,&m);
For(i,m) {int u,v,w;scanf("%d%d%d",&u,&v,&w);addedge(u,v,w),addedge(v,u,w);}
scanf("%d",&ud);For(i,ud) scanf("%d%d%d",&ask[i].no,&ask[i].x,&ask[i].y);
f[0]=0;
For(i,day)
{
f[i]=INF;
Rep(j,i)
{
SPFA(j+1,i);
if (d[n]==INF) continue;
else f[i]=min(f[i],f[j]+(i-j)*d[n]+k);
}
}
printf("%d",f[day]-=k);
return 0;
}