#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXN = 110;
int dp[MAXN][5*MAXN];
vector<int >vv[MAXN];
int flag[MAXN];
int ts[MAXN];
int pre[MAXN];
int n,T;
int mp[MAXN][MAXN];
int ans[5*MAXN];
void dfs(int u,int p)
{
if(u==n)
{
pre[u]=p;
return;
}
int siz=vv[u].size();
for(int i=0;i<siz;i++)
{
int v=vv[u][i];
if(v==p) continue;
pre[u]=p;
dfs(v,u);
}
}
void DP(int u,int p,int ti)
{
dp[u][0]=ts[u];
int siz=vv[u].size();
for(int i=0;i<siz;i++)
{
int v=vv[u][i];
if(v==p||flag[v]) continue;
int w=mp[u][v];
DP(v,u,ti-w);
for(int k=ti;k>=0;k--)
for(int j=0;j<=k&&k-j-2*w>=0;j++)
{
if(dp[v][j]!=-1&&dp[u][k-j-2*w]!=-1)
dp[u][k]=max(dp[u][k],dp[u][k-j-2*w]+dp[v][j]);
}
}
}
int main()
{
while(~scanf("%d%d",&n,&T))
{
for(int i=0;i<=n;i++) vv[i].clear();
memset(dp,-1,sizeof(dp));
memset(flag,0,sizeof(flag));
memset(pre,-1,sizeof(pre));
for(int i=1;i<n;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
vv[u].push_back(v);
vv[v].push_back(u);
mp[u][v]=mp[v][u]=w;
}
for(int i=1;i<=n;i++)
scanf("%d",&ts[i]);
dfs(1,0);
flag[1]=1;
int t=0;
for(int i=n;i!=1;i=pre[i])
{
flag[i]=1;
t+=mp[i][pre[i]];
}
if(t>T)
{
puts("Human beings die in pursuit of wealth, and birds die in pursuit of food!");
}
else
{
T-=t;
for(int i=1;i<=n;i++)
if(flag[i]) DP(i,0,T);
memset(ans,-1,sizeof(ans));
ans[0]=0;
for(int i=n;i!=-1;i=pre[i])
{
for(int k=T;k>=0;k--)
{
for(int j=0;j<=k;j++)
{
if(ans[k-j]!=-1&&dp[i][j]!=-1)
{
ans[k]=max(ans[k],ans[k-j]+dp[i][j]);
}
}
}
}
int res=0;
for(int i=T;i>=0;i--)
res=max(res,ans[i]);
printf("%d\n",res);
}
}
return 0;
}