#include<bits/stdc++.h>
#define longint long long
using namespace std;
longint n,m,k,x,y,ans,a[2501];
longint f[2501][2501],jl[2501];
vector<longint>v[2501],l[2501];
struct cmp{
bool operator()(longint x,longint y){
return a[x]>a[y];
}
};
int main(){
// freopen("holiday.in","r",stdin);
// freopen("holiday.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&k);k++;
for(int i=2;i<=n;i++) scanf("%lld",a+i);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=2e18;
for(int i=1;i<=n;i++){
queue<longint>q;
while(!q.empty()) q.pop();
q.push(i);
f[i][i]=0;
while(!q.empty()){
longint u=q.front();q.pop();
for(int j=0;j<v[u].size();j++){
if(f[i][u]+1>k) continue;
if(f[i][u]+1<f[i][v[u][j]]){
f[i][v[u][j]]=f[i][u]+1;
q.push(v[u][j]);
}
}
}
for(int j=1;j<=n;j++){
if(f[i][j]<=k&&i!=j) l[i].push_back(j),f[i][j]=1;
else f[i][j]=0;
}
}
for(int i=2;i<=n;i++){
for(int j=2;j<=n;j++){
if(!f[i][j]) continue;
for(int qj=0;qj<l[i].size();qj++){//l[i][qj]
for(int qjj=0;qjj<l[j].size();qjj++){//l[j][qjj]
if(l[i][qj]!=j&&l[j][qjj]!=i&&l[i][qj]!=l[j][qjj]&&f[1][l[i][qj]]&&f[1][l[j][qjj]]){
ans=max(ans,a[l[i][qj]]+a[l[j][qjj]]+a[i]+a[j]);
}
}
}
}
}
printf("%lld",ans);
}
好像这个是n^2的啊,是不是常数太大了?