#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e4 + 5;
struct node {
int v, w;
};
int a[N], dis[N], book[N], n, m, b;
vector<node>e[N];
int dij(int x) {
memset(book, 0x3f, sizeof(book));
priority_queue<pair<int, int>>q;
q.push({0, 1});
memset(dis, 0x3f, sizeof(dis));
dis[1] = 0;
while (!q.empty()) {
int tmp = q.top().second;
q.pop();
if (book[tmp])
continue;
book[tmp] = 1;
for (int i = 0; i < e[tmp].size(); i++) {
int v = e[tmp][i].v;
int w = e[tmp][i].w;
if (dis[v] > dis[tmp] + w && x >= a[v]) {
dis[v] = dis[tmp] + w;
q.push({-dis[v], v});
}
}
}
return dis[n] <= b;
}
signed main() {
cin >> n >> m >> b;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i++) {
int x, y, z;
cin >> x >> y >> z;
e[x].push_back({y, z});
e[x].push_back({x, z});
}
int l = a[1], r = 1e9;
int ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (dij(mid)) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
if (ans == -1)
cout << "AFK" << endl;
else
cout << ans << endl;
return 0;
}