#include<bits/stdc++.h>
using namespace std;
const int INF=1000000000+10;
const int maxn=10000+10;
const int maxm=50000+10;
struct node
{
    int u,v,w,next;
}e[maxm<<1];
int n,m,hb,id=0;
int b[maxn],c[maxn];
int head[maxm<<1],d[maxn];
bool vis[maxn];
priority_queue<int,vector<int>,greater<int> >q;
void add(int x,int y,int t)
{
    id++;
    e[id].u=x;
    e[id].v=y;
    e[id].w=t;
    e[id].next=head[x];
    head[x]=id;
    return;
}
bool check(int x)
{
    if(x<b[1]||x<b[n])return false;
    
    for(int i=1;i<=n;i++)d[i]=INF;
    for(int j=1;j<=n;j++)
        if(b[j]>x)vis[j]=true;
            else vis[j]=false;
    d[1]=0;q.push(1);
    while(!q.empty()){
        int now=q.top();
        q.pop();
        if(vis[now])continue;
        vis[now]=true;
        for(int i=head[now];i;i=e[i].next)
            if(d[e[i].v]>e[i].w+d[now]){
                d[e[i].v]=e[i].w+d[now];
                q.push(e[i].v);}}
    if(d[n]<=hb)return true;
        else return false;}
int main()
{
    int j,k,t,ans,maxx=0;
    cin>>n>>m>>hb;
    for(int i=1;i<=n;i++){
        cin>>b[i];
        c[i]=b[i];}
    for(int i=1;i<=m;i++){
        cin>>j>>k>>t;
        if(j==k)continue;
        add(j,k,t);
        add(k,j,t);}
    sort(c+1,c+n+1);
    int l=1,r=n,mid;
    if(!check(c[n])){
    	cout<<"AFK"<<endl;
    return 0;
}
    ans=c[n];
    while(l<=r)
	{
        mid=(l+r)>>1;
        if(check(c[mid]))
		{
            ans=c[mid];
            r=mid-1;
		}
            else l=mid+1;}
    cout<<ans; 
return 0;
}