#include #pragma GCC target("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; #define lli long long int #define uli unsigned long long int #define INF 9999999999 #define rep(i,m,n) for(lli i = m;i < n;i++) #define rrep(i,m,n) for(lli i=m-1;i>=n;i--) #define pb(n) push_back(n) #define UE(N) N.erase(unique(N.begin(),N.end()),N.end()); #define Sort(n) sort(n.begin(), n.end()) #define Rev(n) reverse(n.begin(),n.end()) #define Out(S) cout << S << endl #define NeOut(S) cout << S #define HpOut(S) cout << setprecision(50) << S << endl #define Vec(K,L,N,S) vector K(N,S) #define DV(K,L,N,M,S) vector> K(N,vector(M,S)) #define TV(K,L,N,M,R,S) vector>> K(N,vector>(M,vector(R,S))) #define pint pair #define paf(L,R) pair #define mod 998244353 #define MAX 10000000 #define ALL(a) a.begin(),a.end() #define chmax(a, b) a = (((a)<(b)) ? (b) : (a)) #define chmin(a, b) a = (((a)>(b)) ? (b) : (a)) struct edge{ lli to; lli money; lli time; }; edge make_edge(lli a,lli b,lli c){ struct edge temp; temp.to=a; temp.money=b; temp.time=c; return temp; } int main(){ ios::sync_with_stdio(false); cin.tie(0); lli A,B,C,D,E,F,K,N,M,L,X,Y,Z,H,W,sum=0,num=0,flag=0;string S,T; cin >> N >> K >> M; DV(dp,lli,N,K+10,INF);//dp[i][j]:頂点iにお金をj円持ってる状態で行くのにかかる最小時間 vector>G(N);//G[i][j]:頂点iと頂点jを結ぶ辺のコスト(金,時間) DV(temp,lli,4,M,0); rep(i,0,4)rep(j,0,M)cin >> temp[i][j]; rep(i,0,M)G[temp[0][i]-1].pb(make_edge(temp[1][i]-1,temp[2][i],temp[3][i])); dp[0][K]=0; rep(i,0,N)rep(j,0,K+10)for(auto v:G[i])if(j-v.money>=0)chmin(dp[v.to][j-v.money],dp[i][j]+v.time); num=INF; rep(i,0,K+10)chmin(num,dp[N-1][i]); if(num==INF)num=-1; Out(num); }