#include <bits/stdc++.h>
using namespace std;
bool memory1;
typedef long long ll;
typedef unsigned long long ull;
typedef double dbe;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
typedef vector<ll> vll;
typedef vector<int> vii;
#define openFile(name) freopen((name ".inp"), "r", stdin), freopen((name ".out"), "w", stdout)
#define FOR(i, a, b, x) for (ll i = (a); i <= (b); i += (x))
#define ROF(i, a, b, x) for (ll i = (a); i >= (b); i += (x))
#define fi first
#define se second
#define MASK(x) (1LL << (x))
#define getBit(mask, i) (((mask) >> (i)) & 1LL)
#define BitOn(mask) (__builtin_popcountll(mask))
const int maxN = 1e4 + 5;
//const ll maxBit = MASK(8) + 2;
const ll LOG = 20;
const ll INF18 = 1e18;
const int INF9 = 1e9;
//const ll INF3f = 0x3f3f3f3f3f3f3f3f;
const ll MOD = 1e9 + 7;
//////////////////////////////////////////////
/////////////////nhan0123456//////////////////
//////////////////////////////////////////////
ll n, X, K;
int sz[maxN];
ll tmp[2][maxN];
ll dp[2][maxN][maxN];
vector<pll> adj[maxN];
void dfs(int u, int pre) {
sz[u] = 1;
for (pll &p : adj[u]) if (p.se != pre) {
dfs(p.se, u);
sz[u] += sz[p.se];
}
tmp[0][0] = tmp[1][0] = 0;
FOR (i, 1, sz[u], 1) tmp[0][i] = tmp[1][i] = INF18;
int knapSize = 0;
for (pll &p : adj[u]) if (p.se != pre) {
ll v, w;
tie(w, v) = p;
ROF (pre, knapSize, 0, -1)
FOR (cur, 1, sz[v], 1) {
int sum = pre + cur;
tmp[0][sum] = min(tmp[0][sum], tmp[0][pre] + dp[0][v][cur] + 2 * w);
tmp[1][sum] = min(tmp[1][sum], tmp[0][pre] + dp[1][v][cur] + w);
tmp[1][sum] = min(tmp[1][sum], tmp[1][pre] + dp[0][v][cur] + 2 * w);
}
knapSize += sz[v];
}
FOR (i, 0, sz[u] - 1, 1) {
dp[0][u][i + 1] = tmp[0][i];
dp[1][u][i + 1] = tmp[1][i];
}
}
ll Solve() {
dfs(X, X);
return dp[1][X][K];
}
void input() {
cin >> n >> K >> X;
int u, v, w;
FOR (i, 2, n, 1) {
cin >> u >> v >> w;
adj[u].emplace_back(w, v);
adj[v].emplace_back(w, u);
}
cout << Solve() << "\n";
}
int main() {
//openFile("temp");
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
//bool memory2;
//cerr << "\n\n\nTime: "<< 1000.0 * closdck() / CLOCKS_PER_SEC << " ms";
//cerr << "\n\n\nMemory: "<< abs(&memory1 - &memory2) * 1.0 / MASK(20) <<" MB";
return 0;
}