#include <stdio.h>

int n,m,p,a,b;
int t[8];
int rinsetu[30][30];

/* [tichet_status][city] */
double memo[256][30];
char visited[256][30];

double tansaku(int tichet,int city) {
	double result=-1,nowresult;
	int i,j;
	if(city==b)return 0;
	if(tichet==0)return -1;
	if(visited[tichet][city])return memo[tichet][city];

	for(i=0;i<m;i++) {
		if(rinsetu[city][i]>0) {
			for(j=0;j<n;j++) {
				if(tichet & (1<<j)) {
					nowresult=tansaku(tichet & ~(1<<j),i);
					if(nowresult>=0) {
						nowresult+=(double)rinsetu[city][i]/t[j];
						if(result<0 || result>nowresult)result=nowresult;
					}
				}
			}
		}
	}

	visited[tichet][city]=1;
	memo[tichet][city]=result;
	return result;
}

int main(void) {
	while(scanf("%d%d%d%d%d",&n,&m,&p,&a,&b)==5 && (n|m|p|a|b)!=0) {
		int i,j;
		double result;
		for(i=0;i<30;i++) {
			for(j=0;j<30;j++)rinsetu[i][j]=0;
		}
		for(i=0;i<256;i++) {
			for(j=0;j<30;j++)visited[i][j]=0;
		}

		for(i=0;i<n;i++)scanf("%d",&t[i]);
		for(i=0;i<p;i++) {
			int x,y,z;
			scanf("%d%d%d",&x,&y,&z);
			x--;y--;
			rinsetu[x][y]=z;
			rinsetu[y][x]=z;
		}
		a--;b--;
		result=tansaku((1<<n)-1,a);
		if(result>=0)printf("%.15f\n",result);
		else puts("Impossible");
	}
	return 0;
}