#include<fstream>
#include<algorithm>
#include <iostream>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
#include <stack>
#include <queue>
#include <iterator>
#include <vector>
#include <iterator>
#include <math.h>
#include<cstring>
#include <cmath>
#include <sstream>
#include<cstring>
#include<cstdlib>
#include <set>
#include <cstdio>
#include<map>
#include <cmath>
#include <map>
#define fst first
#define snd second
#define pb push_back
#define fast std::ios_base::sync_with_stdio(false);
#define LL long long
#define endl "\n"
#define lp(i,n) for(int i=0;i<(int)n;i++)
#define all(v)              ((v).begin()), ((v).end())
#define sz(v)               ((int)((v).size()))
#define clr(v, d)           memset(v, d, sizeof(v))
#define rep(i, v)       for(int i=0;i<sz(v);i++)
#define neg(v)       memset(v,-1,sizeof(v))
#define emp(v)       memset(v,0,sizeof(v))
#define rep(i, v)       for(int i=0;i<sz(v);i++)
#define lp1(i,n)    for(int i=1;i<=(int)n;i++)
#define countBits(msk) __builtin_popcount(msk)
using namespace std;
#define FOR(container, it) for(typeof(container.begin()) it = container.begin(); it != container.end(); it++)
typedef vector<int> vi;
typedef istringstream iss;
typedef vector<vector<int> > vvi;
typedef vector<pair<int,int> > vii;
typedef pair<int,int> ii;
#define readfile freopen("input.txt","r",stdin);
#define writefile ("output.txt","w",stdout);
const double EPS = 1e-6;
LL gcd(LL a, LL b) { if(b==0) return a;   return gcd(b,a%b);  }
LL lcm (LL a, LL b) {   return a*(b/(gcd(a,b)));  }
inline int toInt(string s){int v; istringstream sin(s);sin>>v;return v;}
inline LL toLL(string s){LL v; istringstream sin(s);sin>>v;return v;}
int dcmp(double x, double y) {  return fabs(x-y) <= EPS ? 0 : x < y ? -1 : 1; }
template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str();}
using namespace std;
int N,M,e;
int ME,POLICE;
int dis[101][101];
int dis2[101][101];
vector<int> exits;
const int oo = 32323332;




int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		exits.clear();
		scanf("%d %d %d",&N,&M,&e);
		lp(i,101){
			lp(j,101){
				if(i==j){
					dis[i][j] = 0; dis2[i][j] = 0;
				}
				else{
					dis[i][j] = oo; dis2[i][j] = oo;
				}
			}
		}

		int u,v,d;
		lp(i,M){
			scanf("%d %d %d",&u,&v,&d); --u; --v;
			dis[u][v] = d; dis2[u][v] = d;
			dis[v][u] =d; dis2[v][u]=d;
		}
		lp(i,e){
			scanf("%d",&u);--u;
			exits.push_back(u);
		}
		scanf("%d %d",&ME,&POLICE); --ME; --POLICE;
		lp(k,N){
			if(k==POLICE) continue;

			lp(i,N){
				if(i==POLICE) continue;
				lp(j,N){
					if(j==POLICE) continue;
					if(dis[i][k]!=oo&&dis[k][j]!=oo) dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]);

				}
			}
		}
		lp(k,N){

			lp(i,N){
				lp(j,N){
					if(dis2[i][k]!=oo&&dis2[k][j]!=oo) dis2[i][j] = min(dis2[i][j],dis2[i][k]+dis2[k][j]);

				}
			}
		}
		double res = oo;
		rep(k,exits){
			int curr =exits[k];


			double c = dis[ME][curr]*160.0/dis2[POLICE][curr];

			if(res-c>=EPS) res = c;
		}




		if(res==oo) printf("IMPOSSIBLE\n");
		else printf("%.9f\n",res);


	}
}
