#include<bits/stdc++.h>
using namespace std;
int w[1000001];
int h[1000001];
int v[1000001];
int ne[1000001];
int dis[1000001];
int cnt=0,s,k;
int c[1000001];
int vis[1000001];
int n,m;
typedef pair<int, int> PI;
void dijstla() {
for(int i=1; i<=n; i++) {
vis[i]=0;
dis[i]=INT_MAX;
}
priority_queue<pair<int,int>, vector<pair<int,int> >,greater<pair<int,int> > > q;
dis[s]=0;
q.push({0,s});
while(!q.empty()) {
PI t=q.top();
q.pop();
int x=t.first;
int y=t.second;
if(vis[y]) {
continue;
}
vis[y]=1;
for(int i=h[y]; i!=-1; i=ne[i]) {
if(y==s) {
if(dis[y]<=k&&dis[y]<dis[v[i]]) {
dis[v[i]]=dis[y];
q.push({dis[v[i]],v[i]});
}
continue;
}
if(dis[y]+1<=k&&dis[y]+1<dis[v[i]]) {
dis[v[i]]=dis[y]+1;
q.push({dis[v[i]],v[i]});
}
}
}
}
int dis2[2500][2500];
int b[1000001];
void add(int x,int y) {
v[++cnt]=y;
ne[cnt]=h[x];
h[x]=cnt;
}
struct stu {
int x,y;
} a[100001];
bool cmp(stu x,stu y) {
return x.x<y.x;
}
int main() {
memset(h,-1,sizeof(h));
cin>>n>>m>>k;
for(int i=2; i<=n; i++) {
cin>>w[i];
a[i].x=w[i];
a[i].y=i;
}
int ans=0;
sort(a+2,a+2+n,cmp);
while(m--) {
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
for(int i=1; i<=n; i++) {
s=i;
dijstla();
for(int j=1; j<=n; j++) {
dis2[i][j]=dis[j];
}
}
for(int i=2; i<=n; i++) {
if(dis2[1][i]==INT_MAX) {
continue;
}
int sum1=0,sum2=0;
for(int j=n; j>=2; j--) {
if(a[j].y!=1&&a[j].y!=i) {
sum1+=a[j].x;
sum2++;
}
if(sum2==3) {
break;
}
}
if(w[i]+sum1<=ans) {
continue;
}
for(int j=2; j<=n; j++) {
if(j!=i) {
if(dis2[i][j]==INT_MAX) {
continue;
}
sum1=0,sum2=0;
for(int k=n; k>=2; k--) {
if(a[k].y!=1&&a[k].y!=i&&a[k].y!=j) {
sum1+=a[k].x;
sum2++;
}
if(sum2==2) {
break;
}
}
if(w[i]+sum1+w[j]<=ans) {
continue;
}
for(int k=2; k<=n; k++) {
if(k!=i&&k!=j) {
if(dis2[j][k]==INT_MAX) {
continue;
}
sum1=0,sum2=0;
for(int o=n; o>=2; o--) {
if(a[o].y!=1&&a[o].y!=i&&a[o].y!=j&&a[o].y!=k) {
sum1+=a[o].x;
sum2++;
}
if(sum2==1) {
break;
}
}
if(w[i]+w[j]+w[k]+sum1<=ans) {
continue;
}
for(int o=2; o<=n; o++) {
if(o!=i&&o!=j&&o!=k) {
if(dis2[k][o]==INT_MAX) {
continue;
}
if(dis2[o][1]==INT_MAX) {
continue;
}
ans=max(ans,w[i]+w[j]+w[k]+w[o]);
}
}
}
}
}
}
}
cout<<ans<<endl;
return 0;
}