#include using namespace std; using ll=long long; using Graph=vector>>; using pp=pair>; #define MAX 200003 #define MOD 1000000007 #define INF 1000000000 int N,C,V; vector S,T,Y,M; int main(){ cin>>N>>C>>V; S.resize(V); T.resize(V); Y.resize(V); M.resize(V); Graph G(N); for(int i=0;i>S.at(i); S.at(i)--; } for(int i=0;i>T.at(i); T.at(i)--; } for(int i=0;i>Y.at(i); } for(int i=0;i>M.at(i); } for(int i=0;i> time(N,vector(301,INF)); time.at(0).at(C)=0; priority_queue,greater> pq; pq.push(make_pair(time.at(0).at(C),make_pair(0,C))); while(!pq.empty()){ int v=pq.top().second.first; int m=pq.top().second.second; pq.pop(); for(auto e:G.at(v)){ int nv=e.first; int i=e.second; if(m-Y.at(i)<0){ continue; } if(time.at(nv).at(m-Y.at(i))>time.at(v).at(m)+M.at(i)){ time.at(nv).at(m-Y.at(i))=time.at(v).at(m)+M.at(i); pq.push(make_pair(time.at(nv).at(m-Y.at(i)),make_pair(nv,m-Y.at(i)))); } } } int ans=INF; for(int i=0;i<=300;i++){ ans=min(ans,time.at(N-1).at(i)); } if(ans==INF){ cout<<-1<