//土尔逊Torson 编写于2023/07/07
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <climits>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
const int INF = INT_MAX;
struct City_road14001 {
int to;
int length;
City_road14001(int to, int length):to(to),length(length){}
};
struct City14001 {
int id;
int distance;
City14001(int id,int diatance):id(id),distance(distance){}
bool operator<(City14001 p)const {
return distance > p.distance;
}
};
vector<City_road14001> graph14001[MAXN];
int dis14001[3][MAXN];
int leader[MAXN];
void dijkstra14001(int s) {
int ld = leader[s];
priority_queue<City14001> q;
dis14001[ld][s] = 0;
q.push(City14001(s, dis14001[ld][s]));
while (!q.empty()) {
int u = q.top().id;
q.pop();
for (int i = 0; i < graph14001[u].size(); ++i) {
int v = graph14001[u][i].to;
if (leader[v] != ld) {
continue;
}
int len = graph14001[u][i].length;
if (dis14001[ld][v] > dis14001[ld][u] + len) {
dis14001[ld][v] = dis14001[ld][u] + len;
q.push(City14001(v, dis14001[ld][v]));
}
}
}
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == 0) {
break;
}
int m;
scanf("%d", &m);
memset(graph14001, 0, sizeof(graph14001));
fill(dis14001[1], dis14001[1] + n + 1, INF);
fill(dis14001[2], dis14001[2] + n + 1, INF);
while (m--) {
int from, to, length;
scanf("%d%d%d", &from, &to, &length);
graph14001[from].push_back(City_road14001(to, length));
graph14001[to].push_back(City_road14001(from, length));
}
for (int i = 1; i <= n; i++) {
int ld;
scanf("%d", &ld);
leader[i] = ld;
}
dijkstra14001(1);
dijkstra14001(2);
int answer = INF;
for (int i = 1; i <= n; ++i) {
for (auto& City_road14001 : graph14001[i]) {
int j = City_road14001.to;
int ld_i = leader[i], ld_j = leader[j];
if (ld_i != ld_j) {
int dis_i = dis14001[ld_i][i], dis_j = dis14001[ld_j][j];
if (dis_i != INF && dis_j != INF) {
answer = min(answer, dis_i + dis_j + City_road14001.length);
}
}
}
}
if (answer == INF) {
printf("-1\n");
}
else {
printf("%d\n", answer);
}
}
system("pause");
return EXIT_SUCCESS;
}
// 64 位输出请用 printf("%lld")