WA on #1,#2
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fo(i,a,b) for(int i=a;i<=b;i++)
const int mn=205;
int co[mn][mn],f[mn];
int n,m,k,cnt,head[mn],tot=0;
bool pd[25][mn];
struct edge{
int nxt,to,dis;
}e[mn<<1];
struct node{
int w,now;
bool operator < (const node &b) const
{
return w>b.w;
}
};
void add(int u,int v,int dis)
{
e[++tot]={head[u],v,dis};
head[u]=tot;
}
int len[mn];
bool vis[mn];
void dij()
{
priority_queue<node> q;
len[1]=0;
q.push((node){0,1});
while(!q.empty())
{
node kk=q.top(); q.pop();
int u=kk.now;
if(vis[u]) continue;
vis[u]=true;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(vis[v]) continue;
// cout<<len[v]<<" "<<len[u]<<"\n";
if(len[v]>len[u]+e[i].dis)
{
len[v]=len[u]+e[i].dis;
// cout<<"release"<<"\n";
q.push((node){len[v],v});
}
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m>>k>>cnt;
fo(i,1,cnt)
{
int x,y,z; cin>>x>>y>>z;
add(x,y,z); add(y,x,z);
}
int d; cin>>d;
fo(i,1,d)
{
int p,a,b; cin>>p>>a>>b;
fo(j,a,b) pd[p][j]=1;
}
fo(i,1,n)
{
fo(k,1,n)
{
fo(j,1,n) vis[j]=false,len[j]=INT_MAX;
fo(r,i,k) fo(l,1,m) if(pd[l][r]) vis[l]=true;
dij();
co[i][k]=len[m];
// cout<<len[m]<<"\n";
}
}
// fo(i,1,n)
// {
// fo(j,1,n)
// {
// cout<<co[i][j]<<" ";
// }
// }
memset(f,0x7f,sizeof(f));
fo(i,1,n)
{
f[i]=co[1][i]*i;
for(int j=i-1;j>=0;j--)
{
f[i]=min(f[i],f[j]+co[j+1][i]*(i-j)+(!!j)*k);
}
}
cout<<f[n];
return 0;
}