#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2505;
const int inf=1e9;
int n,m,kk,dis[N][N];
ll ans=0,s[N];
vector<int>g[N],to[N];
void bfs(int st)
{
for(int i=1;i<=n;++i)dis[st][i]=inf;
queue<int>q;q.push(st);dis[st][st]=-1;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=0;i<g[u].size();++i)
{
int v=g[u][i];
if(dis[st][v]==inf)
{
dis[st][v]=dis[st][u]+1;
q.push(v);
}
}
}
}
bool cmp(int x,int y)
{
return s[x]>s[y];
}
signed main()
{
freopen("holiday.in","r",stdin);
freopen("holiday.out","w",stdout);
cin>>n>>m>>kk;
for(int i=2;i<=n;++i)cin>>s[i];
for(int i=1;i<=m;++i)
{
int u,v;cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
dis[u][v]=dis[v][u]=1;
}
for(int i=1;i<=n;++i)
bfs(i);
for(int i=1;i<=n;++i)
{
for(int j=2;j<=n;++j)
{
if(j==i)continue;
if(dis[i][j]<=kk)to[i].push_back(j);
}
sort(to[i].begin(),to[i].end(),cmp);
}
int cnt=0;
for(int i=0;i<to[1].size();++i)
{
int u=to[1][i];
for(int j=i+1;j<to[1].size();++j)
{
int v=to[1][j];
for(int k=0;k<to[u].size();++k)
{
int uu=to[u][k];
if(uu==u||uu==v)continue;
for(int l=0;l<to[v].size();++l)
{
int vv=to[v][l];
if(vv==u||vv==v||vv==uu)continue;cnt++;
if(dis[uu][vv]<=kk)ans=max(ans,s[u]+s[v]+s[uu]+s[vv]);
if(cnt>200000000){cout<<ans;return 0;}
}
}
}
}
cout<<ans;
return 0;
}
官方数据 AC 可能性大吗??