#include <iostream>
#include <vector>
using namespace std;

int main() {

  while(true) {

    int n,m,p,a,b;
    cin >> n >> m >> p >> a >> b;
    if ( n == 0 ) break;

    int input1,input2,input3;

    vector<int> t;
    for ( int i = 0; i < n; i++ ) {
      cin >> input1;
      t.push_back(input1);
    }

    int length[30][30] = {0};
    for ( int i = 0; i < p; i++ ) {
      cin >> input1 >> input2 >> input3;
      length[input1-1][input2-1] = input3;
      length[input2-1][input1-1] = input3;
    }

    double time[30][1<<8] = {0.0};

    for ( int i = 0; i < n; i++ ) {
      for ( int k = 0; k < (1<<n); k++ ) {
	int cnt = 0;
	int ticket = k;
	while( ticket != 0 ) {
	  if ( ( ticket & 1 ) != 0 ) cnt++;
	  ticket = ticket >> 1;
	}
	if ( cnt != i ) continue;
	ticket = k;

      for ( int j = 0; j < m; j++ ) {
	if ( ( j != a-1 || ticket != 0 ) && time[j][ticket] == 0.0 ) continue;

	for ( int x = 0; x < n; x++ ) {
	  if ( ( ticket & (1<<x) ) != 0 ) continue;

	  for ( int y = 0; y < m; y++ ) {
	    if ( length[j][y] == 0 ) continue;

	    double z = time[j][ticket] + 1.0 * length[j][y] / t[x];
	    if ( time[y][ticket+(1<<x)] == 0.0 || time[y][ticket+(1<<x)] > z ) time[y][ticket+(1<<x)] = z;

	  }
	}
      }
      }
    }

    double time_min = 0.0;
    for ( int i = 0; i < (1<<n); i++ ) {
      if ( time[b-1][i] != 0.0 && ( time_min == 0.0 || time_min > time[b-1][i] ) ) time_min = time[b-1][i];
    }
    if ( time_min != 0.0 ) {
      cout << fixed << time_min << endl;
    }else {
      cout << "Impossible" << endl;
    }

  }

  return 0;

}