#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, k;
int s[2510], bvis[2510][2510];
bool r[2510][2510], flag[2510];
queue<int> q;
void bfs(int start)
{
q.push(start);
while (!q.empty())
{
int now = q.front();
q.pop();
if (bvis[start][now] >= k) continue;
for (int i = 1; i <= n; i++)
{
if (r[now][i] == 0 || bvis[start][i] != -1) continue;
bvis[start][i] = bvis[start][now] + 1;
q.push(i);
}
}
}
int dfs(int p, int x)
{
bfs(x);
bvis[x][x] = -1;
int sum = 0;
if (p > 4) return 0;
if (p == 4)
{
if (bvis[x][1] == -1)
{
return -1e9;
}
}
for (int i = 2; i <= n; i++)
{
if (bvis[x][i] == -1 || flag[i] == 1) continue;
flag[i] = 1;
sum = max(sum, dfs(p + 1, i) + s[x]);
flag[i] = 0;
}
return sum;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> n >> m >> k;
for (int i = 2; i <= n; i++) cin >> s[i];
while(m--)
{
int a, b;
cin >> a >> b;
r[a][b] = r[b][a] = 1;
}
memset(bvis, -1, sizeof(bvis));
cout << dfs(0, 1) << endl;
return 0;
}