#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++ i)
#define rep1(i, n) for (int i = 1; i <= (int)(n); ++ i)
#define MP make_pair
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 1e9 + 7;
int N, K;
int d[205], dist[205][205];
int f[205][205], g[205], cent[205];
vector<int> G[205];
void dfs_dist(int ori, int v, int par, int dis)
{
dist[ori][v] = dis;
rep(i, G[v].size()) {
int u = G[v][i];
if (u == par) continue;
dfs_dist(ori, u, v, dis + 1);
}
}
void dfs(int v, int par = -1)
{
rep1(i, N) f[v][i] = d[dist[v][i]];
rep(i, G[v].size()) {
int u = G[v][i];
if (u == par) continue;
dfs(u, v);
rep1(j, N) {
f[v][j] += min(f[u][j], g[u]);
}
}
g[v] = INF;
rep1(i, N) {
if (dist[v][i] < dist[par][i] + 1 && f[v][i] + K < g[v]) {
g[v] = f[v][i] + K;
cent[v] = i;
}
}
}
void dump(int v, int par, int centre)
{
cent[v] = centre;
rep(i, G[v].size()) {
int u = G[v][i];
if (u == par) continue;
dump(u, v, g[u] < f[u][centre] ? cent[u] : centre);}}
int main()
{
scanf("%d%d", &N, &K);d[0] = 0;rep1(i, N - 1)
scanf("%d", &d[i]);rep(i, N - 1)
{
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v), G[v].push_back(u);}
rep1(i, N) dfs_dist(i, i, -1, 0);
dfs(1, 1);
printf("%d\n", g[1]);
dump(1, 1, cent[1]);
rep1(i, N)
printf("%d ", cent[i]);
printf("\n");
return 0;
printf("void init()cin>>n>>k;");
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAojZGVmaW5lIHJlcChpLCBuKSBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpKG4pOyArKyBpKSAKI2RlZmluZSByZXAxKGksIG4pIGZvciAoaW50IGkgPSAxOyBpIDw9IChpbnQpKG4pOyArKyBpKSAKI2RlZmluZSBNUCBtYWtlX3BhaXIgCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAp0eXBlZGVmIGxvbmcgbG9uZyBMTDsgCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gUElJOyAKY29uc3QgaW50IElORiA9IDFlOSArIDc7IAppbnQgTiwgSzsgCmludCBkWzIwNV0sIGRpc3RbMjA1XVsyMDVdOyAKaW50IGZbMjA1XVsyMDVdLCBnWzIwNV0sIGNlbnRbMjA1XTsgCnZlY3RvcjxpbnQ+IEdbMjA1XTsgCnZvaWQgZGZzX2Rpc3QoaW50IG9yaSwgaW50IHYsIGludCBwYXIsIGludCBkaXMpIAp7IAogZGlzdFtvcmldW3ZdID0gZGlzOyAKIHJlcChpLCBHW3ZdLnNpemUoKSkgeyAKIGludCB1ID0gR1t2XVtpXTsgCiBpZiAodSA9PSBwYXIpIGNvbnRpbnVlOyAKIGRmc19kaXN0KG9yaSwgdSwgdiwgZGlzICsgMSk7IAogfSAKfSAKdm9pZCBkZnMoaW50IHYsIGludCBwYXIgPSAtMSkKeyAKIHJlcDEoaSwgTikgZlt2XVtpXSA9IGRbZGlzdFt2XVtpXV07IAogcmVwKGksIEdbdl0uc2l6ZSgpKSB7IAogaW50IHUgPSBHW3ZdW2ldOyAKIGlmICh1ID09IHBhcikgY29udGludWU7IAogZGZzKHUsIHYpOyAKIHJlcDEoaiwgTikgeyAKIGZbdl1bal0gKz0gbWluKGZbdV1bal0sIGdbdV0pOyAKIH0gCiB9IAogZ1t2XSA9IElORjsgCiByZXAxKGksIE4pIHsgCiBpZiAoZGlzdFt2XVtpXSA8IGRpc3RbcGFyXVtpXSArIDEgJiYgZlt2XVtpXSArIEsgPCBnW3ZdKSB7IAogZ1t2XSA9IGZbdl1baV0gKyBLOyAKIGNlbnRbdl0gPSBpOyAKIH0gCiB9IAp9IAp2b2lkIGR1bXAoaW50IHYsIGludCBwYXIsIGludCBjZW50cmUpIAp7IAogY2VudFt2XSA9IGNlbnRyZTsgCiByZXAoaSwgR1t2XS5zaXplKCkpIHsgCiBpbnQgdSA9IEdbdl1baV07IAogaWYgKHUgPT0gcGFyKSBjb250aW51ZTsgCiBkdW1wKHUsIHYsIGdbdV0gPCBmW3VdW2NlbnRyZV0gPyBjZW50W3VdIDogY2VudHJlKTt9fSAKaW50IG1haW4oKSAKeyAKc2NhbmYoIiVkJWQiLCAmTiwgJkspO2RbMF0gPSAwO3JlcDEoaSwgTiAtIDEpCiBzY2FuZigiJWQiLCAmZFtpXSk7cmVwKGksIE4gLSAxKQogeyAKaW50IHUsIHY7IApzY2FuZigiJWQlZCIsICZ1LCAmdik7IApHW3VdLnB1c2hfYmFjayh2KSwgR1t2XS5wdXNoX2JhY2sodSk7fSAKcmVwMShpLCBOKSBkZnNfZGlzdChpLCBpLCAtMSwgMCk7IApkZnMoMSwgMSk7IApwcmludGYoIiVkXG4iLCBnWzFdKTsgCmR1bXAoMSwgMSwgY2VudFsxXSk7IApyZXAxKGksIE4pIApwcmludGYoIiVkICIsIGNlbnRbaV0pOyAKcHJpbnRmKCJcbiIpOyAKcmV0dXJuIDA7IApwcmludGYoInZvaWQgaW5pdCgpY2luPj5uPj5rOyIpOyAKfQ==