#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2510;
long long sc[MAXN];
vector<long long > g[MAXN];
int d[MAXN][MAXN];
int n,m,k;
long long top;
bool flagall;
bool flag[MAXN],flagc[MAXN];
void solve(int x,int tmp,int y){
if (tmp > k+1) return;
for (int i = 0;i < g[x].size();i++){
d[y][g[x][i]] = tmp;
d[g[x][i]][y] = tmp;
solve(g[x][i],tmp+1,y);
}
return;
}
void pr(long long point,int pos,int dep,int from){
if (flag[pos] == true && pos != 1){
return;
}else flag[pos] = true;
point += sc[pos];
if (dep == 5 && pos == 1){
//cout << point << ' ';
top = max(point,top);
flag[pos] = false;
return;
}
if (dep == 5){
flag[pos] = false;
return;
}
for (int i = 1;i <= n;i++){
if (d[pos][i] && pos != i){
//if (flag[i]) pr(point,i,dep);
pr(point,i,dep+1,pos);
}
}
flag[pos] = false;
return;
}
int main(){
freopen("holiday.in","r",stdin);
freopen("holiday.out","w",stdout);
cin >> n >> m >> k;
for (int i = 2;i <= n;i++){
cin >> sc[i];
}
for (int i = 0,x,y;i < m;i++){
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
for (int i = 1;i <= n;i++){
solve(i,1,i);
}
pr(0,1,0,1);
cout << top << endl;
// for (int i = 1;i <= n;i++){
// for (int j = 1;j <= n;j++){
// cout << d[i][j] << ' ';
// }
// cout << endl;
// }
return 0;
}