1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 using namespace std;
7 #define Maxn 110
8 #define Maxm 1100
9 #define LL long long
10 #define INF 0xfffffff
11 const double eps=1e-8;
12
13 double w[Maxn],f[Maxn][Maxn][2];
14 double mymax(double x,double y) {return x>y?x:y;}
15
16 int main()
17 {
18 int n,m,st;
19 double p;
20 scanf("%d%d",&n,&m);
21 for(int i=1;i<=n;i++) scanf("%lf",&w[i]);
22 scanf("%d%lf",&st,&p);
23 memset(f,0xc2,sizeof(f));
24 for(int i=1;i<=n;i++) f[i][i][0]=0;
25 for(int i=1;i<=m;i++)
26 {
27 int x,y;
28 scanf("%d%d",&x,&y);
29 f[x][y][0]=w[y]*p;
30 }
31 int nw=0;
32 for(double l=p;l>eps;l=l*l)
33 {
34 for(int i=1;i<=n;i++)
35 for(int j=1;j<=n;j++)
36 f[i][j][nw^1]=-INF;
37 for(int k=1;k<=n;k++)
38 for(int i=1;i<=n;i++)
39 for(int j=1;j<=n;j++)
40 {
41 f[i][j][nw^1]=mymax(f[i][j][nw^1],f[i][k][nw]+f[k][j][nw]*l);
42 }
43 nw^=1;
44 }
45 double ans=0;
46 for(int i=1;i<=n;i++) ans=mymax(ans,f[st][i][nw]);
47 printf("%.1lf\n",ans+w[st]);
48 return 0;
49 }