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