#include <iostream>
#include <complex>
#include <sstream>
#include <string>
#include <algorithm>
#include <deque>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <vector>
#include <set>
#include <limits>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
#define REP(i, j) for(int i = 0; i < (int)(j); ++i)
#define FOR(i, j, k) for(int i = (int)(j); i < (int)(k); ++i)
#define SORT(v) sort((v).begin(), (v).end())
#define REVERSE(v) reverse((v).begin(), (v).end())
typedef pair<int, int> P;
const int MAX_V = 51;
const int MAX_L = (1 << 10);
const int MAX_K = 15;
const int INF = 1e9;
#define DEBUG

class C{
  public:
    int n, t, b;
    C(){}
    C( int _n, int _t ){ n = _n; t = _t; b = 0; }
    C( int _n, int _t, int _b){ n = _n; t = _t; b = _b; }
    bool operator > (const C &c) const { return t > c.t; }
};

int G[MAX_V][MAX_V], S, T, V, E, L, K;
bool B[MAX_V];
int closed[MAX_V][MAX_L][MAX_K], cnt[MAX_V][MAX_L];;
map<int, int> bn;

int solve(){
  priority_queue<C, vector<C>, greater<C>> open;
  open.push(C(S, 0));
  REP(i, MAX_V) REP(j, MAX_L) REP(k, MAX_K) closed[i][j][k] = INF;
  REP(i, MAX_V) REP(j, MAX_L) cnt[i][j] = 0;
  while(!open.empty()){
    C now = open.top(); open.pop();
    int n = now.n, b = now.b, t = now.t;
    if(B[n]) b = (b | (1 << bn[n]));
    if(cnt[n][b] >= K || closed[n][b][cnt[n][b]] < t) continue;
    closed[n][b][cnt[n][b]++] = t;
    REP(next, V){
      if(G[n][next] == INF) continue;
      open.push(C(next, t + G[n][next], b));
    }
  }
  return (closed[T][(1 << L) - 1][K - 1] == INF ? -1 : closed[T][(1 << L) - 1][K - 1]);
}

int main() {
  while(cin >>V >>E >>L >>K && V){
    REP(i, MAX_V) REP(j, MAX_V) G[i][j] = INF;
    memset(B, 0, sizeof(B));
    REP(i, E){
      int u, v, c; cin >>u >>v >>c;
      --u; --v;
      G[u][v] = G[v][u] = c;
    }
    cin >>S >>T;
    --S; --T;
    REP(i, L){
      int n; cin >>n;
      --n;
      B[n] = true;
      bn[n] = i;
    }
    int ans = solve();
    if(ans == -1) cout <<"NA" <<endl;
    else cout <<ans <<endl;
  }
  return 0;
}