#include using namespace std; #define int long long #define pb push_back #define fi first #define se second #define rep(i,s,n) for(int i = s;i=(s);i--) #define all(v) (v).begin(),(v).end() #define chmin(a,b) a=min((a),(b)) #define chmax(a,b) a=max((a),(b)) #define low(a,b) lower_bound(all(a),(b)) #define upp(a,b) upper_bound(all(a),(b)) #define fill(i,n) memset(i,n,sizeof(i)) #define endl '\n' #define IOS() ios_base::sync_with_stdio(0);cin.tie(0) typedef long long ll; typedef pairpint; typedef vectorvint; typedef vector vvint; typedef vectorvpint; typedef pair P1; typedef pair P2; typedef pair PP; static const ll maxLL = (ll)1 << 62; const ll MOD=1000000007; const ll INF=1e18; signed main() { IOS(); int n,c,w; cin>>n>>c>>w; using T=tuple; std::vector>G(n) ; vector s(w),t(w),y(w),m(w); rep(i,0,w)cin>>s[i]; rep(i,0,w)cin>>t[i]; rep(i,0,w)cin>>y[i]; rep(i,0,w)cin>>m[i]; rep(i,0,w){ s[i]--,t[i]--; G[s[i]].emplace_back(t[i],y[i],m[i]); } vector dp(n,vint(c+1,INF)); priority_queue,greater> que; dp[0][0]=0; que.emplace(dp[0][0],0,0); while(!que.empty()){ int v,x,d; tie(d,v,x)=que.top();que.pop(); //cout<c)continue; if(dp[u][nx]>nd){ dp[u][nx]=nd; que.emplace(dp[u][nx],u,nx); } } } int ans=INF; rep(x,0,c+1)chmin(ans,dp[n-1][x]); if(ans>=INF)ans=-1; cout<