#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
struct E{
int to,d;
};
struct E2{
int to,state,d;
long long int time;
bool operator<(const E2& e2)const{
return time>e2.time;
}
};
long long int dp[4][203][10003];
int room[10003];
vector<E> cons[10003];
int n,m,x;
int main() {
memset(dp,-1,sizeof(dp));
cin>>n>>m>>x;
for(int i=1;i<=n;i++){
cin>>room[i];
}
for(int i=0;i<m;i++){
int from,to;
E e1;
cin>>from>>to>>e1.d;
e1.to=to;
cons[from].push_back(e1);
e1.to=from;
cons[to].push_back(e1);
}
E2 e2;
e2.to=1;
e2.state=room[1];
e2.time=0;
e2.d=x;
priority_queue<E2> pq;
pq.push(e2);
while(pq.size()>0){
E2 e2=pq.top();
//cout<<"("<<e2.time<<" "<<e2.state<<" "<<e2.to<<" "<<e2.d<<")"<<endl;
pq.pop();
long long int t1=dp[e2.state][e2.d][e2.to];
if(t1!=-1 && t1<=e2.time)continue;
dp[e2.state][e2.d][e2.to]=e2.time;
for(auto it=cons[e2.to].begin();it!=cons[e2.to].end();it++){
E e1a=(*it);
E2 e2a;
e2a.to=e1a.to;
e2a.state=e2.state;
e2a.time=e2.time+e1a.d;
e2a.d=e2.d-e1a.d;
if(e2a.d<=0)e2a.d=0;
bool moveok=false;
if(e2a.d<=0){
moveok=true;
e2a.state=room[e1a.to];
if(room[e1a.to]==1){
e2a.d=0;
}else{
e2a.d=x;
}
}else{
if(room[e1a.to]==1){
moveok=true;
}else if(room[e1a.to]==e2a.state){
moveok=true;
e2a.d=x;
}
}
//cout<<"("<<e1a.to<<" "<<e1a.d<<" "<<e2a.d<<")";
if(moveok==false)continue;
pq.push(e2a);
}
}
int ans=-1;
for(int j=0;j<3;j++){
for(int i=0;i<=200;i++){
long long int t1=dp[j][i][n];
if(ans==-1 || (t1!=-1 && t1<ans))ans=t1;
}
}
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxxdWV1ZT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBFewoJaW50IHRvLGQ7Cn07CnN0cnVjdCBFMnsKCWludCB0byxzdGF0ZSxkOwoJbG9uZyBsb25nIGludCB0aW1lOwoJYm9vbCBvcGVyYXRvcjwoY29uc3QgRTImIGUyKWNvbnN0ewoJCXJldHVybiB0aW1lPmUyLnRpbWU7Cgl9Cn07CgoKbG9uZyBsb25nIGludCBkcFs0XVsyMDNdWzEwMDAzXTsKaW50IHJvb21bMTAwMDNdOwp2ZWN0b3I8RT4gY29uc1sxMDAwM107CmludCBuLG0seDsKaW50IG1haW4oKSB7CgltZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CgljaW4+Pm4+Pm0+Png7Cglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJY2luPj5yb29tW2ldOwoJfQoJZm9yKGludCBpPTA7aTxtO2krKyl7CgkJaW50IGZyb20sdG87CgkJRSBlMTsKCQljaW4+PmZyb20+PnRvPj5lMS5kOwoJCWUxLnRvPXRvOwoJCWNvbnNbZnJvbV0ucHVzaF9iYWNrKGUxKTsKCQllMS50bz1mcm9tOwoJCWNvbnNbdG9dLnB1c2hfYmFjayhlMSk7Cgl9CglFMiBlMjsKCWUyLnRvPTE7CgllMi5zdGF0ZT1yb29tWzFdOwoJZTIudGltZT0wOwoJZTIuZD14OwoJcHJpb3JpdHlfcXVldWU8RTI+IHBxOwoJcHEucHVzaChlMik7Cgl3aGlsZShwcS5zaXplKCk+MCl7CgkJRTIgZTI9cHEudG9wKCk7CgkJLy9jb3V0PDwiKCI8PGUyLnRpbWU8PCIgIjw8ZTIuc3RhdGU8PCIgIjw8ZTIudG88PCIgIjw8ZTIuZDw8IikiPDxlbmRsOwoJCXBxLnBvcCgpOwoJCWxvbmcgbG9uZyBpbnQgdDE9ZHBbZTIuc3RhdGVdW2UyLmRdW2UyLnRvXTsKCQlpZih0MSE9LTEgJiYgdDE8PWUyLnRpbWUpY29udGludWU7CgkJZHBbZTIuc3RhdGVdW2UyLmRdW2UyLnRvXT1lMi50aW1lOwoJCWZvcihhdXRvIGl0PWNvbnNbZTIudG9dLmJlZ2luKCk7aXQhPWNvbnNbZTIudG9dLmVuZCgpO2l0KyspewoJCQlFIGUxYT0oKml0KTsKCQkJCgkJCUUyIGUyYTsKCQkJZTJhLnRvPWUxYS50bzsKCQkJZTJhLnN0YXRlPWUyLnN0YXRlOwoJCQllMmEudGltZT1lMi50aW1lK2UxYS5kOwoJCQllMmEuZD1lMi5kLWUxYS5kOwoJCQlpZihlMmEuZDw9MCllMmEuZD0wOwoJCQlib29sIG1vdmVvaz1mYWxzZTsKCQkJaWYoZTJhLmQ8PTApewoJCQkJbW92ZW9rPXRydWU7CgkJCQllMmEuc3RhdGU9cm9vbVtlMWEudG9dOwoJCQkJaWYocm9vbVtlMWEudG9dPT0xKXsKCQkJCQllMmEuZD0wOwoJCQkJCgkJCQl9ZWxzZXsKCQkJCQllMmEuZD14OwoJCQkJfQoJCQl9ZWxzZXsKCQkJCQoJCQkJaWYocm9vbVtlMWEudG9dPT0xKXsKCQkJCQltb3Zlb2s9dHJ1ZTsKCQkJCX1lbHNlIGlmKHJvb21bZTFhLnRvXT09ZTJhLnN0YXRlKXsKCQkJCQltb3Zlb2s9dHJ1ZTsKCQkJCQllMmEuZD14OwoJCQkJfQoJCQl9CgkJCS8vY291dDw8IigiPDxlMWEudG88PCIgIjw8ZTFhLmQ8PCIgIjw8ZTJhLmQ8PCIpIjsKCQkJaWYobW92ZW9rPT1mYWxzZSljb250aW51ZTsKCQkJcHEucHVzaChlMmEpOwoJCX0KCX0KCWludCBhbnM9LTE7Cglmb3IoaW50IGo9MDtqPDM7aisrKXsKCQlmb3IoaW50IGk9MDtpPD0yMDA7aSsrKXsKCQkJbG9uZyBsb25nIGludCB0MT1kcFtqXVtpXVtuXTsKCQkJaWYoYW5zPT0tMSB8fCAodDEhPS0xICYmIHQxPGFucykpYW5zPXQxOwoJCX0KCX0KCWNvdXQ8PGFuczsKCXJldHVybiAwOwp9