#include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); long long N,M,K; cin >> N >> M >> K; vector>> Graph(N); for(int i=0; i> u >> v; u--; v--; long long w; cin >> w; Graph.at(u).push_back({v,w%K}); Graph.at(v).push_back({u,w%K}); } while(true){ vector dist(N,-1); dist.at(0) = 0; long long loop = 0; auto dfs = [&](auto dfs,int pos) -> void { long long d = dist.at(pos); for(auto [to,w] : Graph.at(pos)){ long long now = d+w; if(now >= K) now -= K; if(dist.at(to) == -1){ dist.at(to) = now; dfs(dfs,to); if(loop) return; } else if(dist.at(to) != now){ loop = abs(dist.at(to)-now); return; } } }; dfs(dfs,0); if(loop == 0){cout << dist.at(N-1) << "\n"; break;} K = gcd(K,loop); for(int i=0; i