VIOLET__FOREVER @ 2022-06-28 14:07:21
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
ll x,y,z,n,m,b,l,r,mid,ans=1e9+10,v[100005];
struct node{
ll to,next,value;
}edgn[100005];
ll head[100005],tot,dist[100005];
bool be[100005];
void add(int x,int y,int v){
tot++;
edgn[tot].to=y;
edgn[tot].value=v;
edgn[tot].next=head[x];
head[x]=tot;
}
bool di(int flag){
for(int i=2;i<=n;i++){
dist[i]=0x3f3f3f3f;
be[i]=0;
}
be[1]=0;
priority_queue<PII,vector<PII>,greater<PII> > heap;
heap.push({0,1});
while(!heap.empty()){
PII w=heap.top();
heap.pop();
int ver=w.second;
if(be[ver]) continue;
be[ver]=1;
for(int i=head[ver];i!=0;i=edgn[i].next){
int x=edgn[i].to;
if(v[x]<=flag && dist[x]>dist[ver]+edgn[i].value){
dist[x]=dist[ver]+edgn[i].value;
heap.push({dist[x],x});
}
}
}
if(dist[n]>b) return 0;
else return 1;
}
int main(){
cin>>n>>m>>b;
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
sort(v+1,v+1+n);
l=1,r=n;
while(l<=r){
mid=(l+r)>>1;
if(di(v[mid])){
ans=v[mid];
r=mid-1;
}
else l=mid+1;
}
if(ans==1e9+10){
cout<<"AFK";
return 0;
}
cout<<ans;
return 0;
}