### constants

INF = Float::INFINITY

### main

loop do
  n, m, pn, a, b = gets.split.map(&:to_i)
  break if (n | m | pn | a | b) == 0

  a -= 1
  b -= 1

  tickets = gets.split.map(&:to_i)

  edges = m.times.map{[]}
  nbrs = m.times.map{[]}

  pn.times do
    xi, yi, zi = gets.split.map(&:to_i)
    xi -= 1
    yi -= 1

    edges[xi][yi] = edges[yi][xi] = zi.to_f
    nbrs[xi] << yi
    nbrs[yi] << xi
  end
  #p edges
  #p nbrs

  nbits = (1 << n) - 1

  times = m.times.map{(nbits + 1).times.map{INF}}
  times[a][nbits] = 0.0
  q = [[a, nbits]]

  while ! q.empty?
    u = q.min{|a, b| times[a[0]][a[1]] <=> times[b[0]][b[1]]}
    q.delete(u)

    ui, ubits = u
    next if ui == b

    ut = times[ui][ubits]

    for vi in nbrs[ui]
      for ti in (0...n)
        bti = 1 << ti
        next if (ubits & bti) == 0

        vbits = ubits & ~bti
        vt = ut + edges[ui][vi] / tickets[ti]

        if times[vi][vbits] > vt
          if times[vi][vbits] >= INF
            q << [vi, vbits]
          end
          times[vi][vbits] = vt
        end
      end
    end
  end

  min_t = INF

  for t in times[b]
    min_t = t if min_t > t
  end

  puts (min_t >= INF ? 'Impossible' : "%.5f" % min_t)
end