#include using namespace std; const int INF = 1000000000; int main(){ int N, M; cin >> N >> M; vector>> E(N); for (int i = 0; i < M; i++){ int A, B, C; cin >> A >> B >> C; A--; B--; E[A].push_back(make_pair(C, B)); E[B].push_back(make_pair(C, A)); } vector T(N); for (int i = 0; i < N; i++){ cin >> T[i]; } int MAX = 30001; vector> dp(MAX + 1, vector(N, INF)); dp[0][0] = 0; for (int i = 0; i <= MAX; i++){ for (int j = 0; j < N; j++){ if (dp[i][j] != INF){ for (auto P : E[j]){ int w = P.second; int i2 = i + T[j]; if (i2 <= MAX){ int t = dp[i][j] + T[j] + P.first / (i + T[j]); dp[i2][w] = min(dp[i2][w], t); } } } } } int ans = INF; for (int i = 0; i <= MAX; i++){ ans = min(ans, dp[i][N - 1]); } cout << ans << endl; }