RT
Wa on #4,6,7,8,9
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5,M=2e8+7,mod=1e9+7,INF=2e9;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
#define qmi(a,b) a=min(a,b)
#define qma(a,b) a=max(a,b)
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define atrep(i,l,r) for(int i=(r);i>=(l);i--)
#define vec vector<int>
#define pb push_back
struct node{
int nxt,v,w;
}g[N*2];
int h[N],idx=0;
void add(int a,int b,int c){
g[++idx].nxt=h[a],g[idx].v=b,g[idx].w=c,h[a]=idx;
}
int rt,sz[N],mx[N];
bool vis[N];
int n,m,num;
int dis[N],d[N];
int cnt=0;
bitset<M>tt;// 桶
int Q[N];
bool ans[N];
vector<int>S;
void get_rt(int u,int fa){
sz[u]=1,mx[u]=0;
for(int i=h[u];i;i=g[i].nxt){
int v=g[i].v;
if(v==fa||vis[v]) continue;
get_rt(v,u);
sz[u]+=sz[v];
mx[u]=max(mx[u],sz[v]);
}
mx[u]=max(mx[u],num-sz[u]);
if(mx[u]<mx[rt]||rt==0) rt=u;
}
void get_dis(int u,int fa){
d[++cnt]=dis[u];
for(int i=h[u];i;i=g[i].nxt) {
int v=g[i].v,w=g[i].w;
if(v==fa||vis[v]) continue;
dis[v]=dis[u]+w;
get_dis(v,u);
}
}
void dfs(int u,int fa){
tt[0]=1;S.pb(0);vis[u]=1;
for(int i=h[u];i;i=g[i].nxt){
int v=g[i].v,w=g[i].w;
if(v==fa||vis[v]) continue;
dis[v]=w;get_dis(v,u);
rep(j,1,cnt){
rep(k,1,m){
if(Q[k]>=d[j]) ans[k]|=tt[Q[k]-d[j]];
}
}
rep(j,1,cnt) tt[d[j]]=1,S.pb(d[j]),
cnt=0;
}
for(int i=0;i<S.size();i++)tt[S[i]]=0;S.clear();
for(int i=h[u];i;i=g[i].nxt){
int v=g[i].v,w=g[i].w;
if(v==fa||vis[v]) continue;
num=sz[v];rt=0;
get_rt(v,u);get_rt(rt,-1);
dfs(rt,u);
}
}
signed main() {
cin>>n>>m;
rep(i,1,n-1){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);add(v,u,w);
}
rep(i,1,m) cin>>Q[i];
num=n;get_rt(1,0);get_rt(rt,0);dfs(rt,0);
rep(i,1,m) cout<<(ans[i]?"AYE":"NAY")<<endl;
}