#include <bits/stdc++.h>
using namespace std;
int n, m, k, x, y;
unsigned long long ans;
unsigned long long Q[2501];
int Map[2501][2501];
int read() {
int f = 1, ans = 0;
char ch = getchar();
while(ch < '0' || '9' < ch)
ch = getchar(), ch == '-' ? f = -1 : 0;
while('0' <= ch && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
return f * ans;
}
int main() {
n = read(), m = read(), k = read(), ++k;
for (int i(2); i <= n; ++i) Q[i] = read();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
Map[i][j] = 100;
Map[i][i] = 0;
}
for (int i(1); i <= m; ++i) x = read(), y = read(), Map[x][y] = Map[y][x] = 1;
for (int l(1); l <= n; ++l)
for (int i(1); i <= n; ++i)
for (int j(1); j <= n; ++j)
if(Map[i][l] + Map[l][j] < Map[i][j])
Map[i][j] = Map[j][i] = Map[i][l] + Map[l][j];
for (int i(2); i <= n; ++i) {
for (int j(2); j <= n; ++j) {
if(i - j)
for (int q(2); q <= n; ++q) {
if(i - q && j - q)
for (int p(2); p <= n; ++p) {
if(i - p && j - p && q - p)
if(Map[1][i] <= k && Map[i][j] <= k && Map[j][q] <= k && Map[q][p] <= k && Map[p][1] <= k) {
ans = max(ans, Q[i] + Q[j] + Q[q] + Q[p]);
}
}
}
}
}
printf("%lld", ans);
return 0;
}