#include #include using namespace std; using i32 = int; using i64 = long long; using i128 = __int128_t; using f64 = double; using p2 = pair; using p3 = tuple; using mint = atcoder::modint998244353; constexpr i64 inf = 1e18; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(18); _main(); } void _main() { i64 n, m, k; cin >> n >> m >> k; vector> g(n); for (i64 i = 0; i < m; i++) { i64 u, v, t; cin >> u >> v >> t; u--, v--; t %= k; g[u].push_back({v, t}); g[v].push_back({u, t}); } vector dp(n, -1); auto dfs = [&](auto dfs, i64 v) -> void { for (auto [nv, t] : g[v]) { if (dp[nv] == -1) { dp[nv] = dp[v] + t; dfs(dfs, nv); } i64 d = abs(dp[nv] - dp[v]) + t; k = gcd(k, d); } }; dp[0] = 0; dfs(dfs, 0); cout << dp[n - 1] % k << "\n"; }