#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2510;
int dis[maxn][maxn],ans,n,m,k,vis[maxn],p[maxn];
vector<int> v[maxn],a[maxn];
set<pair<int,int> > st[maxn];
void bfs(int s)
{
memset(vis,0,sizeof(vis));
memset(dis[s],0x3f,sizeof(dis[s]));
queue<int> q;
q.push(s);
vis[s]=1;
dis[s][s]=0;
while(q.size())
{
int l=q.front();
q.pop();
for(int i=0;i<a[l].size();i++)
{
if(!vis[a[l][i]])
{
dis[s][a[l][i]]=dis[s][l]+1;
vis[a[l][i]]=1;
q.push(a[l][i]);
}
}
}
}
signed main()
{
cin>>n>>m>>k;
for(int i=2;i<=n;i++) cin>>p[i];
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
bfs(i);
for(int j=1;j<=n;j++)
{
if(dis[i][j]<=k+1&&i!=j)
{
v[i].push_back(j);
v[j].push_back(i);
}
}
}
for(int i=2;i<=n;i++)
{
for(int j=0;j<v[i].size();j++)
{
if(dis[1][v[i][j]]<=k+1&&v[i][j]!=1) st[i].insert({-p[v[i][j]],v[i][j]});
}
}
for(int b=2;b<=n;b++)
{
for(int i=0;i<v[b].size();i++)
{
int c=v[b][i];
int a=0,d=0,t=0;
if(c==1) continue;
while(!a&&t<st[b].size())
{
auto kk=st[b].begin();
int x=kk->first;
int y=kk->second;
if(y!=c)
{
a=y;
}
t++;
kk=next(kk);
}
t=0;
while(!d&&t<st[c].size())
{
auto kk=st[c].begin();
int x=kk->first;
int y=kk->second;
if(y!=b&&y!=a)
{
d=y;
}
t++;
kk=next(kk);
}
if(!a||!d) continue;
ans=max(p[a]+p[b]+p[c]+p[d],ans);
}
}
cout<<ans<<endl;
return 0;
}