#include<bits/stdc++.h>
using namespace std;
vector<long long> k[2500],vk[2500];
long long g[2500][2500],bfs[3000000][2],v[2500],tk[2500][2500],ps[2500],e1=0,e2=1;
bool sort2(long long a,long long b){
return v[a]>v[b];
}
int main(){
long long n,m,p,ci1,ci2,ans=0;
cin>>n>>m>>p;
for(long long a=0;a<n;a++){
if(a!=0){
cin>>v[a];
}
for(long long b=0;b<n;b++){
if(a!=b){
g[a][b]=0x3f3f3f3f;
}
}
}
for(long long a=0;a<m;a++){
cin>>ci1>>ci2;
ci1--,ci2--;
k[ci1].push_back(ci2);k[ci2].push_back(ci1);
}
for(long long a=0;a<n;a++){
bfs[0][0]=a,bfs[0][1]=0,e1=0,e2=1;
while(e1<e2 && bfs[e1][1]<=p+1){
for(long long b=0;b<k[bfs[e1][0]].size();b++){
long long q=k[bfs[e1][0]][b];
if(g[a][q]==0x3f3f3f3f){
g[a][q]=bfs[e1][1]+1;bfs[e2][0]=q,bfs[e2][1]=bfs[e1][1]+1;e2++;
}
}
e1++;
}
}
for(long long a=0;a<n;a++){
for(long long b=0;b<n;b++){
if(g[a][b]<=p+1){
g[a][b]=1;
}else{
g[a][b]=0;
}
}
}
for(long long a=1;a<n;a++){
for(long long b=1;b<n;b++){
if(a!=b && g[0][b]==1 && g[b][a]==1){
tk[a][ps[a]]=b;ps[a]++;
}
}
sort(tk[a],tk[a]+ps[a],sort2);
}
for(long long a=1;a<n;a++){
for(long long b=a+1;b<n;b++){
long long a1=0,b1=0;
for(long long j=0;j<ps[a];j++){
if(tk[a][j]!=b && tk[a][j]!=0){
a1=tk[a][j];break;
}
}
for(long long j=0;j<ps[a];j++){
if(tk[b][j]!=a && tk[b][j]!=0 && tk[b][j]!=a1){
b1=tk[b][j];break;
}
}
if(a1!=0 && b1!=0){
ans=max(ans,v[a1]+v[a]+v[b]+v[b1]);
}
a1=0,b1=0;
for(long long j=0;j<ps[a];j++){
if(tk[b][j]!=a && tk[b][j]!=0){
b1=tk[b][j];break;
}
}
for(long long j=0;j<ps[a];j++){
if(tk[a][j]!=b && tk[a][j]!=0 && tk[a][j]!=b1){
a1=tk[a][j];break;
}
}
if(a1!=0 && b1!=0){
ans=max(ans,v[a1]+v[a]+v[b]+v[b1]);
}
}
}
cout<<ans;
}
帮新手看一看错哪了