}
if(free_x_num>1) continue;
temp = a[i][var];
for (j = 0; j < var; j++)
{
if (sgn(a[i][j])!=0 && j != free_index) temp -= a[i][j] * x[j];
}
x[free_index] = temp / a[i][free_index];
free_x[free_index] = 0;
}
return var - k;
}
for (i = var - 1; i >= 0; i--)
{
temp = a[i][var];
for (j = i + 1; j < var; j++)
{
if (sgn(a[i][j])!=0) temp -= a[i][j] * x[j];
}
x[i] = temp / a[i][i];
}
return 1;
}
int bfs()
{
queue
qiqi.push(xx);
vis[xx]=true;
while(!qiqi.empty())
{
int u=qiqi.front();
qiqi.pop();
for(int i=1;i<=m;i++)
{
int v=(u+i)%n;
if(sgn(p[i])&&vis[v]==false)
{
vis[v]=true;
qiqi.push(v);
}
}
}
if(vis[y]||vis[(n-y)%n]) return 1;
else return 0;
}
void build()
{
int i,j;
double sum = 0;
sum += p[i]*i;
memset(a, 0, sizeof a);
for (i = 0; i < n; ++i)
{
a[i][i] = 1;
if (!vis[i])
{
a[i][n] = 1e9;
continue;
}
if (i==y||i==(n-y)%n)
{
a[i][n] = 0;
continue;
}
a[i][n] = sum;
int now = i;
for (j = 1; j <=m; ++j)
{
now++;
if (now==n) now = 0;
a[i][now] -= p[j];
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d%d",&n,&m,&y,&xx,&d);
for(int i=1;i<=m;i++)
{
int g;
scanf("%d",&g);
p[i]=1.0*g/100;
}
if(y==xx) {puts("0.00");continue;}
n=2*(n-1);
if(d>0) xx=(n-xx)%n;
memset(vis,false,sizeof(vis));
if(!bfs()) {puts("Impossible !");continue;}
build();
// debug();
int uu=gauss();
if(uu==0) {puts("Impossible !");continue;}
printf("%.2lf\n",x[xx]);
}
}