#include <bits/stdc++.h>
using namespace std;
#define int long long
#define Ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
vector<int> g[2509];
vector<int> f[2509];
int n,m,w[2509],v[2509][2509],d[2509],k;
bool cmp(int u,int v)
{
return w[u]>w[v];
}
void bfs(int x)
{
memset(d,-1,sizeof(d));
queue <int> q;
q.push(x);
d[x]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
if(u!=x)
{
v[x][u]=1;
if(x!=1&&v[1][u])
{
f[x].push_back(u);
sort(f[x].begin(),f[x].end(),cmp);
if(f[x].size()>3) f[x].pop_back();
}
}
if(d[u]==k+1) continue;
for(int i:g[u])
{
if(d[i]==-1)
{
d[i]=d[u]+1;
q.push(i);
}
}
}
}
signed main()
{
cin>>n>>m>>k;
for(int i=2;i<=n;i++)
{
cin>>w[i];
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
bfs(i);
}
int ans=0;
for(int i=2;i<=n;i++)
{
for(int j=2;j<=n;j++)
{
if(v[i][j])
{
for(int x:f[i])
{
for(int y:f[j])
{
if(i!=x&&j!=x&&i!=y) ans=max(ans,w[i]+w[j]+w[x]+w[y]);
}
}
}
}
}
cout<<ans<<'\n';
return 0;
}