#include<bits/stdc++.h>
#define ll long long
#define N 105
#define M 205
using namespace std;
ll n,m,k,e,d,u,v,w;
ll dis[25],vis[25],f[25][105],dp[N],cost[N][N],book[25];
vector<pair<ll,ll> > edge[N];
queue<ll> q;
inline ll read(){
ll f=1,s=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+ch-48;
ch=getchar();
}
return f*s;
}
void spfa(){
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[1]=0;
q.push(1);
while(!q.empty()){
u=q.front(),q.pop();
if(vis[u])
continue;
vis[u]=1;
for(auto i : edge[u]){
ll v=i.first,w=i.second;
if(book[v]) continue;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(v);
}
}
}
}
int main(){
n=read(),m=read(),k=read(),e=read();
for(ll i=1;i<=e;i++){
u=read(),v=read(),w=read();
edge[u].push_back(make_pair(v,w));
edge[v].push_back(make_pair(u,w));
}
d=read();
for(ll i=1;i<=d;i++){
u=read(),v=read(),w=read();
for(ll j=v;j<=w;j++)
f[u][j]=1;
}
for(ll i=1;i<=n;i++)
for(ll j=1;j<=n;j++){
memset(book,0,sizeof book);
for(ll r=i;r<=j;r++)
for(ll l=1;l<=m;l++)
if(f[l][r]) book[l]=1;
spfa();
cost[i][j]=dis[m];
if(cost[i][j]>=1e9) cost[i][j]=1e9;
}
for(ll i=1;i<=n;i++){
dp[i]=cost[1][i]*i;
for(ll j=i-1;j>=1;j--)
dp[i]=min(dp[i],dp[j]+cost[j+1][i]*(i-j)+k);
}
cout<<dp[n];
return 0;
}