#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;
namespace lol
{
const int maxn=2e5+100;
int n, x, y;
ll k;
ll dist[maxn][2];
vector <pair <int, int> > edge[maxn];
void dfs(int v, int pred, int t) {
for(auto [to, w] : edge[v]) {
if(to == pred) continue;
dist[to][t] = dist[v][t] + w;
dfs(to, v, t);
}
}
int solve(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) {
n = N;
x = X + 1;
y = Y + 1;
k = K;
for(int i = 1; i <= n; ++i) {
edge[i].clear();
}
for(int i = 0; i < n - 1; ++i) {
int l = U[i] + 1;
int r = V[i] + 1;
int w = W[i];
edge[l].pb({r, w});
edge[r].pb({l, w});
}
dist[x][0] = 0;
dist[y][1] = 0;
dfs(x, -1, 0);
dfs(y, -1, 1);
multiset <ll> st;
for(int i = 1; i <= n; ++i) {
st.insert(dist[i][0]);
st.insert(dist[i][1]);
}
int ans = 0;
while(st.size()) {
int s = *st.begin();
if(s <= k) {
k -= s;
ans++;
}
else
break;
st.erase(st.begin());
}
return ans;
};
}
int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) {
return lol::solve(N, X, Y, K, U, V, W);
}