#include<cstdio>
#include<queue>
#include<map>
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1<<30
using namespace std;
int main(){
	int n,m,p,a,b;
	while(scanf("%d%d%d%d%d",&n,&m,&p,&a,&b),n){
		a--,b--;
		int t[n],d[m][m];
		rep(i,n)scanf("%d",t+i); rep(i,m)rep(j,m)d[i][j]=0;
		rep(i,p){
			int x,y,z; scanf("%d%d%d",&x,&y,&z);
			x--,y--;
			d[x][y]=d[y][x]=z;
		}
		double cost[1<<n][m],ans=INF; rep(i,1<<n)rep(j,m)cost[i][j]=INF;
		queue<pair<int,int> > F; cost[(1<<n)-1][a]=0;
		F.push(make_pair((1<<n)-1,a));
		while(!F.empty()){
			int cs=F.front().first,cn=F.front().second,ns; F.pop();
			rep(i,m)rep(j,n)if((cs&(1<<j))&&d[cn][i]){
				ns=cs^(1<<j);
				if(cost[ns][i]>cost[cs][cn]+d[cn][i]*1./t[j]){
					cost[ns][i]=cost[cs][cn]+d[cn][i]*1./t[j];
					if(i==b&&cost[ns][i]<ans)ans=cost[ns][i];
					F.push(make_pair(ns,i));
				}
			}
		}
		if(ans==INF)printf("Impossible\n");
		else printf("%.5f\n",ans);
	}
	return 0;
}