#include<stdio.h>
#include<stdlib.h>
#define N 100000000
#define rep(i,n) for(int i=0;(i)<(n);(i)++)
typedef struct{
    int pos;
    int tic;
}Load;
Load queue[N];
int head,num;
void enqueue(int pos,int tic){
    if(num<N){
        queue[(head+num)%N].pos=pos;
        queue[(head+num)%N].tic=tic;
        num++;
    }else{
        printf("エラー\n");
        exit(1);
    }
}
Load dequeue(double cost[30][(1<<8)]){
    int index=head;
    int min=cost[queue[head].pos][queue[head].tic];
    for(int i=head+1;i<head+num;i++){
        if(min>cost[queue[i%N].pos][queue[i%N].tic]){
            min=cost[queue[i%N].pos][queue[i%N].tic];
            index=i%N;
        }
    }
    Load tmp=queue[head]; queue[head]=queue[index]; queue[index]=tmp;
    Load d={-1,-1};
    if(num>0){
        d=queue[head];
        head=(head+1)%N;
        num--;
    }
    return d;
}
int main(void){
    while(1){
        int n,m,p,a,b;
        int t[8];
        int load[30][30]={0};
        scanf("%d%d%d%d%d",&n,&m,&p,&a,&b);
        //初期化 1<=a,b<=n
        a--; b--;
        if(n==0) break;
        rep(i,n) scanf("%d",&t[i]);
        //rep(i,n) printf("%d ",t[i]); puts("");
        int x,y,z;
        rep(i,p){//隣接行列
            scanf("%d%d%d",&x,&y,&z);
            load[x-1][y-1]=load[y-1][x-1]=z;
        }
        /*rep(i,m) {
            rep(j,m){
                printf("%2d ",load[i][j]);
            }puts("");
        }puts("");*/
        head=num=0;
        enqueue(a,0);
        double cost[30][(1<<8)]={0};
        while(1){//ダイクストラ
            Load tmp=dequeue(cost);
            int pos=tmp.pos,tic=tmp.tic;
            if(pos==-1) break;
            if(pos==b) continue;
            for(int i=0;i<m;i++){
                if(load[pos][i]>0){
                    for(int j=0;j<n;j++){
                        if(!((tic>>j)&1)){
                            int ntic=(tic|(1<<j));
                            if(cost[i][ntic]==0||cost[i][ntic]>
                               (cost[pos][tic]+(1.0*load[pos][i]/t[j]))){
                                cost[i][ntic]=cost[pos][tic]
                                +(1.0*load[pos][i]/t[j]);
                                enqueue(i,ntic);
                            }
                        }
                    }
                }
            }
        }
        double min=N;
        //ミス
        for(int i=0;i<(1<<n);i++){
            if(cost[b][i]!=0&&min>cost[b][i])
                min=cost[b][i];
        }
        if(min==N) printf("Impossible\n");
        else printf("%f\n",min);
    }
}

