#ifdef ONLINE_JUDGE #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #endif #include #include using namespace std; using namespace atcoder; using ll = long long; using ull = unsigned long long; using ld = long double; using mint = modint998244353; using mint2 = modint1000000007; #define each(a, ...) for(auto& __VA_ARGS__ : a) #define Each(a, ...) for(auto __VA_ARGS__ : a) #define sz(a) (ll)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() template inline bool chmax(T &a, U &&b) { if (a >= (T)b) return false; a = b; return true; } template inline bool chmin(T &a, U &&b) { if (a <= (T)b) return false; a = b; return true; } template istream &operator>>(istream &is, pair &p) { return is >> p.first >> p.second; } template requires requires(T t) { begin(t); end(t); } && (!is_same_v) istream &operator>>(istream &is, T &v) { for (auto &x : v) is >> x; return is; } template inline void in(T&... a) { (cin >> ... >> a); } template ostream &operator<<(ostream &os, const pair &p) { return os << p.first << ' ' << p.second; } template requires requires(T t) { begin(t); end(t); } && (!is_same_v) ostream &operator<<(ostream &os, const T &v) { for (auto it = begin(v); it != end(v); it++) os << (it == begin(v) ? "" : " ") << *it; return os; } void out() { cout << '\n'; } template inline void out(T &&a, U&&... b) { cout << a; ((cout << ' ' << b), ...); cout << '\n'; } template inline void print(T&&... a) { (cout << ... << a); } template inline bool yn(bool a, T &&b = "Yes", U &&c = "No") { if (a) out(b); else out(c); return a; } constexpr ll inf = LLONG_MAX >> 2; constexpr array, 4> dxdy4 = {{{-1, 0}, {0, -1}, {1, 0}, {0, 1}}}; constexpr array, 8> dxdy8 = {{{-1, 0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}}}; void Main() { ull N,M;in(N,M); vector>>G(N); while(M--){ ull U,V,W;in(U,V,W); U--,V--; G[U].emplace_back(V,W); G[V].emplace_back(U,W); } vectorA(N),B(N),C(N);in(A,B,C); priority_queue,vector>,greater>>pq; vectorD(N,ULLONG_MAX); D[0]=1; pq.emplace(1,0); while(sz(pq)){ auto[Di,i]=pq.top();pq.pop(); if(Di!=D[i])continue; ull j=(Di+A[i]-1)/A[i]; ull dD1=(j%B[i]==0?min(A[i]*j-Di+C[i],A[i]*(j+1)):A[i]*j-Di); each(G[i],[k,dD2])if(chmin(D[k],D[i]+dD1+dD2))pq.emplace(D[k],k); } out(D[N-1]); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(20); Main(); cout << flush; _Exit(EXIT_SUCCESS); }