//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <bitset>
#include <array>
#include <climits>
using namespace std;
const int N = 2e5;
vector<pair<int, int>> G[N];
vector<long long> pre = {0};
int vis[N];
int ans = N;
void dfs(int u, int dist, int &K){
vis[u] = 1;
int find = lower_bound(pre.begin(), pre.end(), K - dist) - pre.begin();
if(find != (int)pre.size() && pre[find] == K - dist){
ans = min(ans, (int)pre.size() - find);
}
pre.push_back(dist);
for(auto &[v, w] : G[u]){
if(vis[v]) continue;
dfs(v, dist + w, 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], w = L[i];
G[u].push_back({v, w});
G[v].push_back({u, w});
}
dfs(0, 0, K);
return ans == N ? -1 : ans;
}
/*
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
}
*/