#include<bits/stdc++.h>
typedef double ld;
int n,m,hp,vs[155];
std::vector<int>es[155];
ld f[10007][155],xs[155][155],ys[155],zs[155][155];
void ae(int a,int b){
if(a==n)return;
++xs[a][a];
if(vs[b])es[a].push_back(b);
else --xs[a][b];
}
int main(){
scanf("%d%d%d",&n,&m,&hp);
for(int i=1;i<=n;++i)scanf("%d",vs+i),zs[i][i]=1;
for(int i=0,a,b;i<m;++i){
scanf("%d%d",&a,&b);
ae(a,b);if(a!=b)ae(b,a);
}
xs[n][n]=1;
for(int i=1;i<=n;++i){
int w=i;
for(int j=i+1;j<=n;++j)if(fabs(xs[j][i])>fabs(xs[w][i]))w=j;
if(w!=i)
for(int j=1;j<=n;++j){
std::swap(xs[i][j],xs[w][j]);
std::swap(zs[i][j],zs[w][j]);
}
ld a=xs[i][i];
for(int j=1;j<=n;++j){
xs[i][j]/=a;
zs[i][j]/=a;
}
for(int j=1;j<=n;++j)if(j!=i){
a=xs[j][i];
for(int k=1;k<=n;++k){
xs[j][k]-=xs[i][k]*a;
zs[j][k]-=zs[i][k]*a;
}
}
}
for(int t=1;t<=hp;++t){
for(int i=1;i<n;++i){
ys[i]=0;
for(int j=0;j<es[i].size();++j){
int u=es[i][j];
if(vs[u]<t)ys[i]+=f[t-vs[u]][u];
}
}
ys[n]=1;
for(int i=1;i<=n;++i){
ld s=0;
for(int j=1;j<=n;++j)s+=zs[i][j]*ys[j];
f[t][i]=s;
}
}
printf("%.8f\n",f[hp][1]);
return 0;
}