#include using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int N, M; long long K; cin >> N >> M >> K; assert(2 <= N && N <= 200'000); assert(1 <= M && M <= 200'000); assert(1 <= K && K <= 1'000'000'000'000'000'000); vector>> E(N); for (int i = 0; i < M; i++) { int u, v; long long t; cin >> u >> v >> t; assert(1 <= min(u, v) && max(u, v) <= N); assert(1 <= t && t <= 1'000'000'000'000'000'000); u--; v--; E[u].emplace_back(v, t); E[v].emplace_back(u, t); } vector D(N, -1); D[0] = 0; queue Q; Q.emplace(0); while (!Q.empty()) { int v = Q.front(); Q.pop(); for (auto [u, t] : E[v]) if (D[u] == -1) { D[u] = (D[v] + t) % K; Q.emplace(u); } } long long g = K; for (int i = 0; i < N; i++) { for (auto [j, t] : E[i]) { g = __gcd(g, D[i] - D[j] - t); if (g < 0) g = -g; } } cout << D[N - 1] % g << endl; return 0; }