#include //#include using namespace std; // using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, r; long long c; cin >> n >> r >> c; vectorx(n), y(n), z(n), s(n); rep(i, n)cin >> x[i];//o-toma rep(i, n)cin >> y[i];//manyuaru rep(i, n)cin >> z[i];//hune rep(i, n)cin >> s[i];//ふねじかん vector e(n, vector>()); rep(i, r) { int u, v, w, a, m; cin >> u >> v >> w >> a >> m; u--, v--; // toho o-toma manyuaru e[u].push_back({ v,w,a,m }); e[v].push_back({ u,w,a,m }); } vector dp(n + 1, vector(3, vector(2, LINF))); dp[0][0][0] = 0; using S = std::pair>; std::priority_queue, std::greater> pq; pq.push({ dp[0][0][0], { 0,0,0 } }); while (!pq.empty()) { auto [cost, state] = pq.top(); pq.pop(); auto [v, s0, s1] = state; if (cost != dp[v][s0][s1])continue; // 空港は特別 if (v == n) { rep(nv, n) { if (chmin(dp[nv][s0][s1], cost + c + s[nv])) { pq.push({ dp[nv][s0][s1], { nv,s0,s1 } }); } } continue; } rep(i, 3)rep(j, 2) { auto ncost = cost; if (i == 1)ncost += x[v]; if (i == 2)ncost += y[v]; if (j == 1)ncost += z[v]; int ns0 = max(i, s0); int ns1 = max(j, s1); for (auto tmp : e[v]) { auto [nv, w, a, m] = tmp; {// toho if (chmin(dp[nv][ns0][ns1], ncost + w)) { pq.push({ dp[nv][ns0][ns1], { nv,ns0,ns1 } }); } } if (1 <= ns0) {// o-toma if (chmin(dp[nv][ns0][ns1], ncost + a)) { pq.push({ dp[nv][ns0][ns1], { nv,ns0,ns1 } }); } } if (2 <= ns0) {// manyuaru if (chmin(dp[nv][ns0][ns1], ncost + m)) { pq.push({ dp[nv][ns0][ns1], { nv,ns0,ns1 } }); } } } if (1 <= ns1) { if (chmin(dp[n][ns0][ns1], ncost + s[v])) { pq.push({ dp[n][ns0][ns1], { n,ns0,ns1 } }); } } } } long long ans = LINF; rep(i, 3)rep(j, 2)chmin(ans, dp[n - 1][i][j]); cout << ans << endl; return 0; }