#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5;
vector<pair<int, int>> G[MAXN];
vector<long long> pre = {0};
int vis[MAXN], ans = MAXN;
void dfs(int u, long long D, int &K){
vis[u] = 1;
int find = lower_bound(pre.begin(), pre.end(), D - K) - pre.begin();
if(find != (int)pre.size() && pre[find] == D - K){
ans = min(ans, (int)pre.size() - find);
}
pre.push_back(D);
for(auto &[v, L] : G[u]){
if(vis[v]) continue;
dfs(v, D + L, K);
}
pre.pop_back();
}
int best_path(int N, int K, int H[][2], int L[]){
for(int i = 0; i < N - 1; i++){
int u = H[i][0], v = H[i][1], l = L[i];
G[u].push_back({v, l});
G[v].push_back({u, l});
}
dfs(0, 0, K);
return ans == MAXN ? -1 : ans;
}
// int main(){
// ios::sync_with_stdio(0);
// cin.tie(0);
// int N = 3, K = 3;
// int H[N - 1][2] = {{0, 1}, {1, 2}}, L[N - 1] = {1, 1};
// cout << best_path(N, K, H, L) << '\n';
// }