import heapq N,S,T,K = map(int,input().split()) X = [0]+list(map(int,input().split())) M = int(input()) G = {i:[] for i in range(1,N+1)} BG = {i:[] for i in range(1,N+1)} for _ in range(M): a,b,y = map(int,input().split()) # G[a].append((b,y+X[b])) BG[b].append((a,y+X[b])) INFTY = 10**15 dp = [[INFTY for _ in range(N+1)] for _ in range(K)] dp[0][S] = X[S] for i in range(1,K): for j in range(1,N+1): for k,y in BG[j]: dp[i][j] = min(dp[i][j],dp[i-1][k]+y) dist = [INFTY for _ in range(N+1)] Pa = [0]*(N+1) visited = [False for _ in range(N+1)] dist[T] = 0 heap = [(0,T)] while heap: d,j = heapq.heappop(heap) if visited[j] or dist[j]d+y: dist[k] = d+y Pa[k] = j heapq.heappush(heap,(d+y,k)) ans = [S] u = S while u!=T: u = Pa[u] ans.append(u) dmin = INFTY indmin = T for j in range(1,N+1): dist_ = dp[K-1][j]+dist[j] if dist_=INFTY: print("Impossible") elif len(ans)>=K: print("Possible") print(dist[S]+X[S]) print(len(ans)) print(*ans) elif dmin0: for v,y in BG[u]: if dp[k][u]==dp[k-1][v]+y: u = v k -= 1 ans.append(u) break ans = ans[::-1] if indmin==T: print(len(ans)) print(*ans) else: u = indmin while u!=T: u = Pa[u] ans.append(u) print(len(ans)) print(*ans) else: print("Impossible")