点分治
/* Local File
in_out/in.in
in_out/out.out
*/
#include <bits/stdc++.h>
using namespace std;
using llt = long long;
using ull = unsigned long long;
using llf = long double;
#define endl '\n'const int N = 3e4 + 3;
int n, m;struct Gph{vector<pair<int, int>> to[N];void Add(int u, int v, int w){to[u].emplace_back(v, w);}void ADD(int u, int v, int w){Add(u, v, w), Add(v, u, w);}
#define For_to(u, v, w, g) for(auto [v, w] : g.to[u])
} g;class PDIV{
private:int sz[N], usz, rt, ck, stk[N], *top = stk;static const int V = 1e7 + 3;bool vis[N], tu[V], aas;void Sz(int u, int f){sz[u] = 1;For_to(u, v, w, g) if(v != f && !vis[v])Sz(v, u), sz[u] += sz[v];}void Rt(int u, int f){bool p = 1;For_to(u, v, w, g) if(v != f && !vis[v])Rt(v, u), p &= (sz[v] * 2 <= usz);if(p && (usz - sz[u]) * 2 <= usz) rt = u;}bool Chk(int u, int f, int d){if(d > ck) return 0;if(tu[ck - d]) return 1;*++top = d;For_to(u, v, w, g) if(v != f && !vis[v])if(Chk(v, u, d + w)) return 1;return 0;}void Clr(){while(top != stk)tu[*top--] = 0;}void Slv(){if(aas == 1) return ;vis[rt] = 1;int u = rt; tu[0] = 1;For_to(u, v, w, g) if(!vis[v]){int *pt = top;if(Chk(v, u, w)){Clr();return aas = 1, void();}for(auto p = top; p != pt; --p)tu[*p] = 1;}Clr();Sz(u, 0);For_to(u, v, w, g) if(!vis[v])usz = sz[v], Rt(v, u), Slv();}
public:bool operator()(int k){ck = k, aas = 0, memset(vis, 0, sizeof vis);Sz(1, 0), usz = sz[1], Rt(1, 0), Slv();return aas;}
} Pdiv;int main(){ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);cin >> n >> m;for(int i = 1; i < n; ++i){int u, v, w; cin >> u >> v >> w;g.ADD(u, v, w);}for(int i = 1; i <= m; ++i){int k; cin >> k;cout << (Pdiv(k) ? "Yes" : "No") << endl;}
}