#ifndef ONLINE_JUDGE #define _GLIBCXX_DEBUG #endif #define _USE_MATH_DEFINES #include using namespace std; using ll = long long; //https://boostjp.github.io/tips/multiprec-int.html using lll = __int128_t; #define YES cout<<"Yes\n" #define NO cout<<"No\n" #define YN {cout<<"Yes\n";}else{cout<<"No\n";}// if(a==b)YN; #define NO2 cout<<"-1\n" #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define rrep(i, n) for (int i=int(n)-1; i>=0; --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() int main() { ios::sync_with_stdio(false); cin.tie(nullptr); using P=pair; int N,M,K; cin >> N >> M >> K; ll INF = ll(1e18); vector> dist(N, vector(M,INF)); vector> G(N); rep(i,M) { ll u,v,t; cin>>u>>v>>t; G[u].emplace_back(P{v,t}); G[v].emplace_back(P{u,t}); } queue

que; que.push(P{0,0}); dist[0][0] = 0; while(que.size()) { auto [cur, time] = que.front(); que.pop(); for (auto [nxt, cost]: G[cur]) { if (time+cost < dist[nxt][time+cost%M]) { dist[nxt][time+cost%M] = time+cost; que.push(P{nxt, time+cost}); } } } ll ans = INF; rep(i,M) ans = min(ans, dist[N][i]); cout << ans << endl; }