#include<bits/stdc++.h>
using namespace std;
long long n,m,b;
long long f[10005];
struct ed{
long long to,nxt,val;
}e[100005];
long long head[10005],cnt=0;
void add(long long x,long long y,long long v){
e[++cnt].to=y;
e[cnt].nxt=head[x];
e[cnt].val=v;
head[x]=cnt;
}
long long dis[10005],st[10005];
queue<long long> qu;
long long spfa(long long fm){
memset(dis,0x3f3f3f,sizeof(dis));
dis[1]=0,st[1]=1;
qu.push(1);
while(!qu.empty()){
long long tmp=qu.front();
qu.pop();
st[tmp]=0;
for(long long i=head[tmp];i;i=e[i].nxt){
long long y=e[i].to;
if(dis[tmp]+e[i].val<dis[y]){
dis[y]=dis[tmp]+e[i].val;
if(!st[y]&&f[y]<=fm){
qu.push(y);
st[y]=1;
}
}
}
}
if(dis[n]>=b) return 0;
else return 1;
}
int main(){
cin>>n>>m>>b;
long long l,r=0;
for(long long i=1;i<=n;i++){
cin>>f[i];
r=max(f[i],r);
}
l=max(f[1],f[n]);
for(long long i=1;i<=n;i++){
long long x,y,v;
cin>>x>>y>>v;
if(x==y) continue;
add(x,y,v);
add(y,x,v);
}
if(!spfa(2000000005)){
cout<<"AFK";
return 0;
}
while(l<=r){
long long mid=(l+r)/2;
if(spfa(mid)) r=mid-1;
else l=mid+1;
}
cout<<l;
return 0;
}