#include <bits/stdc++.h>

using namespace std;

int n,p,k;

const int maxn=200005;

const int inf=0x3f3f3f3f;

struct node { int v; int w; node(int v,int w):v(v),w(w){} bool operator<(const node & t)const { return w>t.w; } };

vectordij[maxn];

int vis[maxn];

int dis[maxn];

void dijkstra(int s) { memset(vis,0,sizeof(vis));

memset(dis,inf,sizeof(dis));

dis[p]=0;

priority_queue<node> Q;

Q.push(node(s,dis[s]));
	
while(!Q.empty())
{
    int u=Q.top().v;  //点 
    Q.pop();
    if(vis[u])
    continue;

    vis[u]=1;

    for(int i=0;i<dij[u].size();i++)
    {
        int v=dij[u][i].v;
        int w=dij[u][i].w;
        if(dis[v]>dis[u]+w)
        {
            dis[v]=dis[u]+w;
            Q.push(node(v,dis[v]));
        }
    }
}

} int main() { cin>>n>>p>>k; for(int i=0;i<n-1;i++) { int u,v,w; cin>>u>>v>>w; dij[u].push_back(node(v,w)); dij[v].push_back(node(u,w)); }

dijkstra(p);
sort(dis+1,dis+1+n);
cout<<dis[k+1];
return 0;

}