#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll oo = 1e18;
const int N = 2005;
int n, sz[N], best_j[N][N][2];
ll k, a[N], dp[N][N][2], next_dp[N][2];
vector<int> adj[N], chosen;
void dfs(int u, int p) {
sz[u] = 1;
for (int i = 0; i <= n; i++) dp[u][i][0] = dp[u][i][1] = oo;
dp[u][0][0] = 0;
dp[u][1][1] = a[u];
for (int v : adj[u]) {
if (v == p) continue;
dfs(v, u);
int nsz = sz[u] + sz[v];
for (int i = 0; i <= nsz; i++) {
next_dp[i][0] = next_dp[i][1] = oo;
}
for (int i = 0; i <= sz[u]; i++) {
for (int j = 0; j <= sz[v]; j++) {
ll min_v = min(dp[v][j][0], dp[v][j][1]);
if (dp[u][i][0] != oo && min_v != oo) {
ll val0 = dp[u][i][0] + min_v;
if (val0 < next_dp[i + j][0]) {
next_dp[i + j][0] = val0;
best_j[v][i + j][0] = j;
}
}
if (dp[u][i][1] != oo && dp[v][j][0] != oo) {
ll val1 = dp[u][i][1] + dp[v][j][0];
if (val1 < next_dp[i + j][1]) {
next_dp[i + j][1] = val1;
best_j[v][i + j][1] = j;
}
}
}
}
sz[u] = nsz;
for (int i = 0; i <= sz[u]; i++) {
dp[u][i][0] = next_dp[i][0];
dp[u][i][1] = next_dp[i][1];
}
}
}
void trace(int u, int p, int c, int st) {
for (int i = (int)adj[u].size() - 1; i >= 0; i--) {
int v = adj[u][i];
if (v == p) continue;
int j = best_j[v][c][st];
int v_st = 0;
if (st == 0) {
if (dp[v][j][0] <= dp[v][j][1]) v_st = 0;
else v_st = 1;
} else v_st = 0;
trace(v, u, j, v_st);
c -= j;
}
if (st == 1) chosen.push_back(u);
}
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 0; i < n - 1; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
int ans = 0, best = 0;
for (int c = n; c >= 0; c--) {
ll min_w = oo;
int st = -1;
if (dp[1][c][0] <= k) { min_w = dp[1][c][0]; st = 0; }
if (dp[1][c][1] <= k && dp[1][c][1] < min_w) { min_w = dp[1][c][1]; st = 1; }
if (st != -1) {
ans = c;
best = st;
break;
}
}
if (ans > 0) trace(1, 0, ans, best);
cout << ans << "\n";
sort(chosen.begin(), chosen.end());
for (int i = 0; i < (int)chosen.size(); i++)
cout << chosen[i] << " ";
cout << "\n";
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGxsIG9vID0gMWUxODsKY29uc3QgaW50IE4gPSAyMDA1OwoKaW50IG4sIHN6W05dLCBiZXN0X2pbTl1bTl1bMl07CmxsIGssIGFbTl0sIGRwW05dW05dWzJdLCBuZXh0X2RwW05dWzJdOwp2ZWN0b3I8aW50PiBhZGpbTl0sIGNob3NlbjsKCnZvaWQgZGZzKGludCB1LCBpbnQgcCkgewogICAgc3pbdV0gPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSBkcFt1XVtpXVswXSA9IGRwW3VdW2ldWzFdID0gb287CiAgICBkcFt1XVswXVswXSA9IDA7CiAgICBkcFt1XVsxXVsxXSA9IGFbdV07CgogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgIGlmICh2ID09IHApIGNvbnRpbnVlOwogICAgICAgIGRmcyh2LCB1KTsKCiAgICAgICAgaW50IG5zeiA9IHN6W3VdICsgc3pbdl07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbnN6OyBpKyspIHsKICAgICAgICAgICAgbmV4dF9kcFtpXVswXSA9IG5leHRfZHBbaV1bMV0gPSBvbzsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHN6W3VdOyBpKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gc3pbdl07IGorKykgewogICAgICAgICAgICAgICAgbGwgbWluX3YgPSBtaW4oZHBbdl1bal1bMF0sIGRwW3ZdW2pdWzFdKTsKICAgICAgICAgICAgICAgIGlmIChkcFt1XVtpXVswXSAhPSBvbyAmJiBtaW5fdiAhPSBvbykgewogICAgICAgICAgICAgICAgICAgIGxsIHZhbDAgPSBkcFt1XVtpXVswXSArIG1pbl92OwogICAgICAgICAgICAgICAgICAgIGlmICh2YWwwIDwgbmV4dF9kcFtpICsgal1bMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9kcFtpICsgal1bMF0gPSB2YWwwOwogICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2pbdl1baSArIGpdWzBdID0gajsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZHBbdV1baV1bMV0gIT0gb28gJiYgZHBbdl1bal1bMF0gIT0gb28pIHsKICAgICAgICAgICAgICAgICAgICBsbCB2YWwxID0gZHBbdV1baV1bMV0gKyBkcFt2XVtqXVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsMSA8IG5leHRfZHBbaSArIGpdWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfZHBbaSArIGpdWzFdID0gdmFsMTsKICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9qW3ZdW2kgKyBqXVsxXSA9IGo7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN6W3VdID0gbnN6OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHN6W3VdOyBpKyspIHsKICAgICAgICAgICAgZHBbdV1baV1bMF0gPSBuZXh0X2RwW2ldWzBdOwogICAgICAgICAgICBkcFt1XVtpXVsxXSA9IG5leHRfZHBbaV1bMV07CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHRyYWNlKGludCB1LCBpbnQgcCwgaW50IGMsIGludCBzdCkgewogICAgZm9yIChpbnQgaSA9IChpbnQpYWRqW3VdLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaW50IHYgPSBhZGpbdV1baV07CiAgICAgICAgaWYgKHYgPT0gcCkgY29udGludWU7CgogICAgICAgIGludCBqID0gYmVzdF9qW3ZdW2NdW3N0XTsKICAgICAgICBpbnQgdl9zdCA9IDA7CiAgICAgICAgaWYgKHN0ID09IDApIHsKICAgICAgICAgICAgaWYgKGRwW3ZdW2pdWzBdIDw9IGRwW3ZdW2pdWzFdKSB2X3N0ID0gMDsKICAgICAgICAgICAgZWxzZSB2X3N0ID0gMTsKICAgICAgICB9IGVsc2Ugdl9zdCA9IDA7CiAgICAgICAgdHJhY2UodiwgdSwgaiwgdl9zdCk7CiAgICAgICAgYyAtPSBqOwogICAgfQoKICAgIGlmIChzdCA9PSAxKSBjaG9zZW4ucHVzaF9iYWNrKHUpOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gazsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBkZnMoMSwgMCk7CgogICAgaW50IGFucyA9IDAsIGJlc3QgPSAwOwogICAgZm9yIChpbnQgYyA9IG47IGMgPj0gMDsgYy0tKSB7CiAgICAgICAgbGwgbWluX3cgPSBvbzsKICAgICAgICBpbnQgc3QgPSAtMTsKICAgICAgICBpZiAoZHBbMV1bY11bMF0gPD0gaykgeyBtaW5fdyA9IGRwWzFdW2NdWzBdOyBzdCA9IDA7IH0KICAgICAgICBpZiAoZHBbMV1bY11bMV0gPD0gayAmJiBkcFsxXVtjXVsxXSA8IG1pbl93KSB7IG1pbl93ID0gZHBbMV1bY11bMV07IHN0ID0gMTsgfQogICAgICAgIAogICAgICAgIGlmIChzdCAhPSAtMSkgewogICAgICAgICAgICBhbnMgPSBjOwogICAgICAgICAgICBiZXN0ID0gc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoYW5zID4gMCkgdHJhY2UoMSwgMCwgYW5zLCBiZXN0KTsKCiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgc29ydChjaG9zZW4uYmVnaW4oKSwgY2hvc2VuLmVuZCgpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCljaG9zZW4uc2l6ZSgpOyBpKyspCiAgICAgICAgY291dCA8PCBjaG9zZW5baV0gPDwgIiAiOwogICAgY291dCA8PCAiXG4iOwp9IAoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKCiAgICBpbnQgdGVzdHMgPSAxOyAvLyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgcy5cbiI7CiAgICAjZW5kaWYKCiAgICByZXR1cm4gMDsKfQo=