#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long long
using namespace std;
const int maxn=200005;
int first[maxn],last[maxn],x,y,z,next[maxn],num,size[maxn],mx[maxn];
int n,i,t,j,k,l;
ll ans,value[maxn],d[maxn],b[maxn],s,e;
void lian(intx,inty,ll z){
last[++num]=y;value[num]=z;next[num]=first[x];first[x]=num;
}
void dg1(intx,inty){
int t;size[x]++;
for (t=first[x];t;t=next[t])
if (last[t]!=y){
dg1(last[t],x);size[x]+=size[last[t]];mx[x]=max(mx[x],size[last[t]]);
}
mx[x]=max(mx[x],n-size[x]);
}
void qsort(int l,int mid,int r){
int i,j,t,k;
for (i=l;i<=r;i++)
b[i]=d[i];
i=l;j=mid+1;t=l-1;
while (i<=mid && j<=r)
if (b[i]<b[j]) d[++t]=b[i++];
else d[++t]=b[j++];
while (i<=mid) d[++t]=b[i++];
while (j<=r) d[++t]=b[j++];
}
void dg(intx,inty){
d[++d[0]]=0;
int t,k=d[0]+1,l,i,j;
for (t=first[x];t;t=next[t])
if (last[t]!=y){
l=d[0]+1;
dg(last[t],x);
for (j=l;j<=d[0];j++){
d[j]+=value[t];
if (d[j]>=s) ans=min(ans,d[j]);
if (d[j]>e){
d[0]=j-1;
break;
}
}
j=d[0];
if (j<l)continue;
for (i=k;i<l;i++){
while (d[i]+d[j]>=s && j>l) j--;
if (d[i]+d[j]<s && j<d[0]) j++;
if (d[i]+d[j]>=s) ans=min(ans,d[i]+d[j]);
if (j==l && d[i]+d[j]>=s) break;
}
if (k<l) qsort(k,l-1,d[0]);
}
}
int main(){
// freopen("data.in","r",stdin);
scanf("%d%d%d",&n,&s,&e);
for (i=1;i<n;i++)
scanf("%d%d%d",&x,&y,&z),lian(x,y,z),lian(y,x,z);
dg1(1,0);
ans=e+1;
for (i=1;i<=n;i++)
if (mx[i]<=n/2){
dg(i,0);
break;
}
if (ans!=e+1) printf("%lld\n",ans);
elseprintf("-1");
}