#include<bits/stdc++.h>
#define M 100005<<1
#define PII pair<int,int>
#define int long long
using namespace std;
struct edge
{
int nxt,to,val;
edge(int _nxt=0,int _to=0,int _val=0){nxt=_nxt,to=_to,val=_val;}
}e[M];
int f[M],dis[M],head[M],cnt,n,m,b,l,r,ans=-1;
bool vis[M];
void add(int u,int v,int w)
{
e[++cnt]=edge(head[u],v,w);
head[u]=cnt;
}
bool check(int x)
{
if(x<f[1]) return 0;
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
priority_queue<PII>q;
q.push(make_pair(0,1));
while(q.size())
{
PII top=q.top();
q.pop();
int d=-top.first,p=top.second;
if(vis[p]) continue;
vis[p]=1;
for(int i=head[p];i;i=e[i].nxt)
{
int to=e[i].to,val=e[i].val,newd=dis[p]+val;
if(dis[to]>newd&&f[to]<=x)
{
dis[to]=newd;
q.push(make_pair(-newd,to));
}
}
}
if(dis[n]<=b) return 1;
else return 0;
}
signed main()
{
scanf("%lld%lld%lld",&n,&m,&b);
for(int i=1;i<=n;i++) scanf("%lld",&f[i]);
for(int i=1,u,v,w;i<=m;i++)
{
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
l=1,r=1000000000;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid)) r=mid-1,ans=mid;
else l=mid+1;
}
if(ans==-1) cout<<"AFK";
else printf("%lld",ans);
}