#include <bits/stdc++.h>   using namespace std;   vector<pair<int, int>> adj[200003];   vector<pair<int, pair<int, int>>> edges;   vector<long long> len;   set<int> vertices;   void dijkstra(int start) {     set<int> vis;     priority_queue<pair<long long, int>, vector<pair<long long, int>>,                    greater<pair<long long, int>>>         pq;     pq.push(make_pair(0, start));     while (!pq.empty()) {       while (!pq.empty() && vis.find(pq.top().second) != vis.end()) pq.pop();       if (pq.empty()) break;       long long l = pq.top().first;       int v = pq.top().second;       pq.pop();       vis.insert(v);       if (l != 0) len.push_back(l);       for (int i = 0; i < adj[v].size(); i++) {         if (vis.find(adj[v][i].first) == vis.end()) {           pq.push(make_pair(l + 1ll * adj[v][i].second, adj[v][i].first));         }       }     }   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     int n, m, k;     cin >> n >> m >> k;     for (int i = 0; i < m; i++) {       int a, b, w;       cin >> a >> b >> w;       edges.push_back(make_pair(w, make_pair(a, b)));     }     sort(edges.begin(), edges.end());     for (int i = 0; i < k && i < edges.size(); i++) {       vertices.insert(edges[i].second.first);       vertices.insert(edges[i].second.second);       adj[edges[i].second.first].push_back(           make_pair(edges[i].second.second, edges[i].first));       adj[edges[i].second.second].push_back(           make_pair(edges[i].second.first, edges[i].first));     }     for (int x : vertices) {       dijkstra(x);     }     sort(len.begin(), len.end());     cout << len[2 * k - 1] << endl;   }   