#include <iostream>
#include <queue>
#include <algorithm>
#include <cmath>

using namespace std;

const double INF = 100000000.0;
const double EPS = 1e-8;

class S{
public:
  int s, p;
  double cost;
  S(){}
  S(int p, double cost, int s) : p(p), cost(cost), s(s) {}
};

int n, m, p, a, b;
int t[8];
int edge[30][30];
double vis[30][1<<8];

bool equals(double a, double b){
  return fabs(b-a) < EPS;
}

void solve(){
  fill(vis[0], vis[30], INF);
  S u, v;
  queue<S> q;
  q.push(S(a, 0.0, (1<<n)-1));
  while(!q.empty()){
    u = q.front(); q.pop();
    for(int i=0;i<n;i++){
      if(1<<i & u.s){
        for(int j=0;j<m;j++){
          if(edge[u.p][j] == -1) continue;
          v.p = j;
          v.cost = u.cost + edge[u.p][v.p] / (double)t[i];
          v.s = u.s & ~(1<<i);
          if(vis[v.p][v.s] > v.cost){
            vis[v.p][v.s] = v.cost;
            q.push(v);
          }
        }
      }
    }
  }
  double res = INF;
  for(int i=0;i<(1<<n);i++) res = min(res, vis[b][i]);
  if(equals(res, INF)) printf("Impossible\n");
  else printf("%.3f\n", res);
}

int main(){
  while(cin >> n >> m >> p >> a >> b && (n|m|p|a|b)){
    fill(edge[0], edge[30], -1);
    a--; b--;
    for(int i=0;i<n;i++) cin >> t[i];
    for(int i=0;i<p;i++){
      int x, y, z;
      cin >> x >> y >> z;
      edge[x-1][y-1] = edge[y-1][x-1] = z;
    }
    solve();
  }
}