#include using namespace std; using ll = long long; int main() { int N, M; cin >> N >> M; ll K; cin >> K; vector>> G(N); for (int i = 0; i < M; i++) { int u, v; cin >> u >> v; u--, v--; ll t; cin >> t; G[u].push_back({v, t}); G[v].push_back({u, t}); } ll g = K; queue q; vector d(N, -1); q.push(0); d[0] = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(auto [v, t]: G[u]) { if(d[v] == -1) { d[v] = (d[u] + t)%K; q.push(v); } g = gcd(g, (d[u] + t + d[v])%K); } } cout << d[N-1]%g << endl; return 0; }