#include #include using namespace std; void solve() { int n, m; cin >> n >> m; vector g(n); vector d(n); int max_time = 0; for (int i = 0; i < n; ++i) { cin >> g[i] >> d[i]; max_time = max(max_time, g[i] / d[i] + 1); } vector>> roads(n, vector>()); for (int i = 0; i < m; ++i) { int a, b, t; cin >> a >> b >> t; --a, --b; roads[a].push_back(make_pair(b, t)); roads[b].push_back(make_pair(a, t)); } vector> dp(n, vector(max_time, 0)); int res = g[0]; dp[0][0] = g[0]; for (int i = 0; i < max_time; ++i) { for (int j = 0; j < n; ++j) { if (dp[j][i] == 0) continue; for (auto kt : roads[j]) { int k = kt.first; int t = kt.second; int new_time = i + t; if (new_time < max_time) { dp[k][new_time] = max(dp[k][new_time], dp[j][i] + max(0, g[k] - d[k] * new_time)); res = max(res, dp[k][new_time]); } } } } cout << res << endl; } int main() { solve(); }