#include using namespace std; template bool chmin(T& a,T b){ if(a > b){ a = b; return true; } else return false; } int main(){ int N,C,V; cin >> N >> C >> V; vector S(V),T(V),Y(V),M(V); for(int i=0;i> S[i]; for(int i=0;i> T[i]; for(int i=0;i> Y[i]; for(int i=0;i> M[i]; vector>>> G(N); for(int i=0;i> dist(N,vector(C+1,INF)); dist[0][0] = 0; priority_queue>,vector>>,greater>>> que; que.push(make_pair(0,make_pair(0,0))); while(!que.empty()){ int d = que.top().first; int v = que.top().second.first; int c = que.top().second.second; que.pop(); if(d > dist[v][c]) continue; for(auto e:G[v]){ int nv = e.first; int y = e.second.first; int m = e.second.second; if(c+y > C) continue; if(chmin(dist[nv][c+y],d+m)){ que.push(make_pair(d+m,make_pair(nv,c+y))); } } } int ans = INF; for(int i=0;i<=C;i++) ans = min(ans,dist[N-1][i]); if(ans == INF) ans = -1; cout << ans << endl; }