全RE,QWQ
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1100
const ll inf=0x3f;
ll n,m,g,o,d,tot;
ll f[MAXN],c[MAXN][MAXN];
ll dis[MAXN],h[MAXN];
bool flag[MAXN],cl[MAXN][MAXN],vis[MAXN];
struct node{
ll nxt,to,dis;
}e[4*MAXN];
void add(ll u,ll v,ll w) {
e[++tot].nxt=h[u];
e[tot].to=v;
e[tot].dis=w;
h[u]=tot;
}
bool spfa() {
queue <ll> q;
for(ll i=1;i<=m;i++) {
dis[i]=inf;
vis[i]=0;
}
q.push(1);
dis[1]=0,vis[1]=1;
while(!q.empty()) {
ll u=q.front();
q.pop();
vis[u]=0;
for(ll i=h[u];i;i=e[i].nxt) {
ll v=e[i].to;
if(flag[v]) continue;
if(dis[v]>dis[u]+e[i].dis) {
dis[v]=dis[u]+e[i].dis;
if(!vis[v]) {
vis[v]=1;
q.push(v);
}
}
}
}
}
int main() {
scanf("%lld%lld%lld%lld",&n,&m,&g,&o);
for(ll i=1,u,v,w;i<=o;i++) {
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
scanf("%lld",&d);
for(ll i=1,p,x,y;i<=d;i++) {
scanf("%lld%lld%lld",&p,&x,&y);
for(ll j=x;j<=y;j++)
cl[p][j]=1;
}
//跑多遍spfa
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++) {
//把空标记为1;
memset(flag,0,sizeof flag);
for(ll k=i;k<=j;k++)
for(ll t=1;t<=m;t++)
if(cl[t][k]) flag[t]=1;
spfa();
c[i][j]=dis[m];
}
memset(f,inf,sizeof f);
for(ll i=1;i<=n;i++) {
f[i]=c[1][i]*i;
for(ll j=n-1;j>=0;j--) {
f[i]=min(f[i],f[j]+c[j+1][i]*(i-j)+g);
}
}
printf("%lld",f[n]);
return 0;
}