#include <bits/stdc++.h>
using namespace std;
#define int long long
#define a2 array <int,2>
const int N=1e5+5;
const int INF=1e15+7;
int n,m,st_pos,d[N],h[N];
vector <a2> adj[N];
priority_queue <a2> pq; // -d_u , u;
signed main()
{
for(int i=0;i<N;i++) d[i]=INF;
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> st_pos;
for(int i=1;i<=n;i++) cin >> h[i];
for(int i=1;i<=m;i++){
int u,v,w;
cin >> u >> v >> w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
d[1]=0;
pq.push({0,1});
while(!pq.empty()){
auto [d_u,u]=pq.top();
pq.pop();
d_u*=(-1);
for(auto [v,w]:adj[u]){
if(h[u]-w<0) continue;
int d_v=d_u+w+w;
if(d[v]>d_v){
d[v]=d_v;
pq.push({-d_v,v});
}
}
}
cout << (d[n]==INF?-1:d[n]+h[n]);
}