#include <bits/stdc++.h>
#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
using namespace std;
const int N=1e4+5;
const ll maxn=1e18;
vector<ll>dp[N][2];
vector<ii>v[N];
int sz[N];
int n,k,x;
void dfs(int s,int pr){
sz[s]=1;
dp[s][0].assign(2,maxn);
dp[s][1].assign(2,maxn);
dp[s][0][1]=0;
dp[s][1][1]=0;
for(auto x:v[s]){
int node=x.fi;
ll w=x.se;
if(node!=pr){
dfs(node,s);
int n1=min(k,sz[s]+sz[node]);
vector<ll>dp1[s+1][2];
dp1[s][0].assign(n1+1,maxn);
dp1[s][1].assign(n1+1,maxn);
for(int i=1;i<=min(sz[s],k);i++){
for(int j=1;j<=min(sz[node],k);j++){
dp1[s][0][i]=min(dp1[s][0][i],dp[s][0][i]);
dp1[s][1][i]=min(dp1[s][1][i],dp[s][1][i]);
if(i+j<=k){
dp1[s][0][i+j]=min(dp1[s][0][i+j],dp[s][1][i]+dp[node][0][j]+w);
dp1[s][0][i+j]=min(dp1[s][0][i+j],dp[s][0][i]+dp[node][1][j]+2*w);
dp1[s][1][i+j]=min(dp1[s][1][i+j],dp[s][1][i]+dp[node][1][j]+2*w);
}
}
}
dp[s][0]=dp1[s][0];
dp[s][1]=dp1[s][1];
// dp[node][0].clear();
// dp[node][1].clear();
sz[s]+=sz[node];
}
}
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
cin >>n >>k >>x;
for(int i=1;i<=n-1;i++){
ll x1,y1,w1;
cin >>x1 >>y1 >>w1;
v[x1].push_back({y1,w1});
v[y1].push_back({x1,w1});
}
dfs(x,-1);
cout << dp[x][0][k];
return 0;
}
/*
11 8 3
1 3 3
3 2 5
6 4 5
1 11 3
9 1 2
9 10 2
3 7 10
6 7 1
7 8 1
7 5 1
*/