#include<bits/stdc++.h>
using namespace std;
const long long inf = LLONG_MAX / 3;
int to[500007], head[100007], _next[500007], ans = 0, tot = 0, b, n, m;
int vis[100007];
long long d[100007];
int edge[500007], a[100007], l = 1e9 + 7, r = 0;
priority_queue<pair<int, int> >q;
void add(int x, int y, long long z){
to[++tot] = y;
edge[tot] = z;
_next[tot] = head[x];
head[x] = tot;
}
void dijkstra(int s){
for(int i = 0; i <= n; i++){
d[i] = inf;
vis[i] = 0;
}
while(!q.empty()) q.pop();
d[s] = 0;
q.push({0, s});
while(q.size()){
int u = q.top().second;
q.pop();
if(vis[u])continue;
vis[u] = 1;
for(int i = head[u]; i; i = _next[i]){
int v = to[i], w = edge[i];
if(d[v] > d[u] + w){
d[v] = d[u] + w;
q.push({-d[v], v});
}
}
}
}
int main(){
cin >> n >> m >> b;
for(int i = 1; i <= n; i++){
cin >> a[i];
r = max(r, a[i]);
}
l = max(a[1], a[n]);
for(int i = 1; i <= m; i++){
int x, y;
long long z;
cin >> x >> y >> z;
add(x, y, z);
add(y, x, z);
}
while(l < r){
int mid = (l + r) >> 1;
dijkstra(mid);
if(d[n] > b)l = mid + 1;
else r = mid;
}
dijkstra(l);
if(d[l] <= b)cout << l;
else cout << "AFK";
return 0;
}