#include using namespace std; using ll = long long; const ll INF = 1LL << 60; #define all(a) begin(a), end(a) #define sz(a) ssize(a) template bool chmin(T& a, U b) { return a > b ? a = b, 1 : 0; } template bool chmax(T& a, U b) { return a < b ? a = b, 1 : 0; } using pll = pair; using vpll = vector; using vll = vector; using vvll = vector; #define _O(_1, _2, _3, n, ...) n #define _r1(i, n) for(ll i = 0; i < (ll)(n); i++) #define _r2(i, l, r) for(ll i = (ll)(l); i < (ll)(r); i++) #define rep(...) _O(__VA_ARGS__, _r2, _r1)(__VA_ARGS__) #define _rr1(i, n) for(ll i = (ll)(n) - 1; i >= 0; i--) #define _rr2(i, l, r) for(ll i = (ll)(r) - 1; i >= (ll)(l); i--) #define rrep(...) _O(__VA_ARGS__, _rr2, _rr1)(__VA_ARGS__) template ostream& operator<<(ostream& o, const pair& p) { return o << "(" << p.first << "," << p.second << ")"; } template ostream& operator<<(ostream& o, const vector& v) { ll i = 0; for(auto& x : v) o << (i++ ? " " : "") << x; return o; } template void out(const H& h, const T&... t) { cout << h; ((cout << " " << t), ...); cout << endl; } int main(){ ll n,m,k; cin >> n >> m >> k; vector> g(n); rep(i,m){ ll u,v,t; cin >> u >> v >> t; --u, --v; g[u].emplace_back(v,t); g[v].emplace_back(u,t); } vll a(n,-1); auto dfs = [&](auto self, ll v, ll time) -> void { a[v] = time; for(auto [u,t] : g[v]){ if(~a[u]) k = gcd(k,abs(time+t-a[u])); else self(self,u,time+t); } }; dfs(dfs,0,0); out(a[n-1]%k); }