#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include using namespace std; //using namespace atcoder; #define repr(i, a, b) for (int i = (int)(a); i < (int)(b); i++) #define rep(i, n) repr(i, 0, n) #define INF 2e9 //#define MOD 1000000007 #define MOD 998244353 #define LINF (long long)4e18 #define jck 3.141592 #define PI acos(-1.0) const double EPS = 1e-18; using ll = long long; using Pi = pair; using Pl = pair; //using mint = modint998244353; int dh[] = {-1,1,0,0}; int dw[] = {0,0,1,-1}; void WarshallFloyd(vector> &dist){ int N = dist.size(); rep(k,N)rep(i,N){ if(dist[i][k] == LINF) continue; rep(j,N){ if(dist[k][j] == LINF) continue; dist[i][j] = min(dist[i][j],dist[i][k] + dist[k][j]); } } } ll dp[1<<18]; int main(){ int n,m,k; cin >> n >> m >> k; vector a(n); rep(i,n) cin >> a[i]; vector dist(n,vector(n,LINF)); rep(i,m){ int x,y,z; cin >> x >> y >> z; x--; y--; dist[x][y] = dist[y][x] = z; } rep(i,n) dist[i][i] = 0; WarshallFloyd(dist); rep(i,1<<18) dp[i] = LINF; dp[0]= 0; rep(j,1<>i&1) continue; ll cost = LINF; rep(l,n){ if(j>>l&1) cost = min(cost,dist[l][i]); } if(cost == LINF) cost = 0; cost += a[i]; dp[j|(1<