#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll lj[101][101];
bool pd[101];
ll f[101];
vector<ll> l[101];
vector<ll> r[101];
ll ans[101][25];
int a,b,d,e;
ll c;
ll dij() {
bool vis[101];
ll dis[101];
memset(vis,0,sizeof(vis));
for(int i=1; i<=100; i++)
dis[i]=999999999;
dis[1]=0;
for(int i=1; i<=b; i++) {
int cnt=0;
for(int j=1; j<=b; j++)
if(vis[j]==0&&dis[cnt]>dis[j])
cnt=j;
vis[cnt]=1;
if(pd[cnt])continue;
for(int j=1; j<=b; j++)
if(j!=cnt&&lj[cnt][j]!=-1&&dis[j]>dis[cnt]+lj[cnt][j]&&!pd[j]) {
dis[j]=dis[cnt]+lj[cnt][j];
}
}
return dis[b];
}
int main() {
cin>>a>>b>>c>>d;
int u=a;
memset(lj,-1,sizeof(lj));
for(int i=1; i<=d; i++) {
ll x,y,z;
cin>>x>>y>>z;
lj[x][y]=z;
lj[y][x]=z;
}
cin>>e;
for(int i=1; i<=e; i++) {
ll x,y,z;
cin>>x>>y>>z;
l[x].push_back(y);
r[x].push_back(z);
}
for(int i=1; i<=u; i++) {
for(int j=i; j<=u; j++) {
memset(pd,0,sizeof(pd));
for(ll t=1; t<=b; t++)
for(ll y=0; y<l[t].size(); y++)
if(l[t][y]>=i&&l[t][y]<=j||r[t][y]>=i&&r[t][y]<=j)
pd[t]=1;
ans[i][j]=dij();
}
}
for(int i=1; i<=u; i++) {
f[i]=i*ans[1][i];
for(int j=i-1; j>=0; j--)
f[i]=min(f[i],f[j]+ans[j+1][i]*(i-j)+c);
}
cout<<f[u];
}