#include #include #include #include #include #include #include #include #include #define int long long int #define rep(i, n) for(int i = 0; i < (n); ++i) using namespace std; typedef pair P; const int INF = 1e15; const int MOD = 1e9+7; signed main(){ int n, c, v; cin >> n >> c >> v; vector s(v), t(v), y(v), m(v); rep(i, v){ cin >> s[i]; } rep(i, v){ cin >> t[i]; } rep(i, v){ cin >> y[i]; } rep(i, v){ cin >> m[i]; } vector> dpY(n+1, vector(n+1, INF)); vector> dpM(n+1, vector(n+1, INF)); rep(i, v){ dpY[s[i]][t[i]] = y[i]; dpM[s[i]][t[i]] = m[i]; } for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if(dpM[i][j] > dpM[i][k] + dpM[k][j] && dpY[i][k] + dpY[k][j] <= c){ dpM[i][j] = dpM[i][k] + dpM[k][j]; dpY[i][j] = dpY[i][k] + dpY[k][j]; } if(dpM[i][j] == dpM[i][k] + dpM[k][j] && dpY[i][j] > dpY[i][k] + dpY[k][j]){ dpY[i][j] = dpY[i][k] + dpY[k][j]; } } } } if(dpY[1][n] > c){ cout << -1 << endl; return 0; } cout << dpM[1][n] << endl; return 0; }