#include<bits/stdc++.h>
using namespace std;
long long n,m,k,f[2510][2510],v[2510],vv[2510],q,mx,sum;
vector<int>a[2510];
void bfs(int x){
memset(vv,0,sizeof(vv));
vv[x]=1;
queue<int>q1,q2;
q1.push(x),q2.push(0);
while (q1.size()){
int xx=q1.front(),yy=q2.front();
q1.pop();q2.pop();
for (int i=0;i<a[xx].size();i++){
if (vv[a[xx][i]]==0){
q1.push(a[xx][i]);
q2.push(yy+1);
f[q][a[xx][i]]=yy;
vv[a[xx][i]]=1;
}
}
}
}
int main(){
freopen("holiday.in","r",stdin);
freopen("holiday.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
memset(f,0x3f3f3f3f,sizeof(f));
for (int i=2;i<=n;i++) scanf("%d",&v[i]);
for (int i=1;i<=m;i++){
long long x,y;
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
f[x][y]=f[y][x]=0;
}
for (int i=1;i<=n;i++){
q=i;
bfs(i);
}
for (int i=2;i<=n;i++){
if (f[1][i]>k) continue;
sum+=v[i];
for (int j=2;j<=n;j++){
if (f[i][j]>k||i==j) continue;
sum+=v[j];
for (int l=2;l<=n;l++){
if (f[j][l]>k||i==l||j==l) continue;
sum+=v[l];
for (int r=2;r<=n;r++){
if (f[l][r]>k||f[1][r]>k||i==r||j==r||l==r) continue;
if (sum+v[r]>mx) mx=sum+v[r];
}
sum-=v[l];
}
sum-=v[j];
}
sum-=v[i];
}
cout<<mx;
return 0;
}