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 dist1 = [INFTY for _ in range(N+1)] visited = [False for _ in range(N+1)] dist1[S] = X[S] heap = [(X[S],S)] while heap: d,j = heapq.heappop(heap) if d>dist1[j]:continue visited[j] = True for k,y in G[j]: if visited[k]:continue if dist1[k]>d+y: dist1[k] = d+y heapq.heappush(heap,(d+y,k)) ans1 = [T] u = T while u!=S: for v,y in BG[u]: if dist1[u]==dist1[v]+y: ans1.append(v) u = v break ans1 = ans1[::-1] dist2 = [[INFTY for _ in range(N+1)] for _ in range(K+1)] visited = [[False for _ in range(N+1)] for _ in range(K+1)] dist2[0][S] = X[S] heap = [(X[S],0,S)] while heap: d,i,j = heapq.heappop(heap) if d>dist2[i][j]:continue visited[i][j] = True if i==K:continue for k,y in G[j]: if visited[i+1][k]:continue if dist2[i+1][k]>d+y: dist2[i+1][k] = d+y heapq.heappush(heap,(d+y,i+1,k)) dist3 = [INFTY for _ in range(N+1)] visited = [False for _ in range(N+1)] dist3[T] = 0 heap = [(0,T)] while heap: d,j = heapq.heappop(heap) if dist3[j]d+y: dist3[k] = d+y heapq.heappush(heap,(d+y,k)) dmin = INFTY indmin = T for j in range(1,N+1): dist_ = dist2[K-1][j]+dist3[j] if dist_=INFTY: print("Impossible") elif len(ans1)>=K: print("Possible") print(dist1[T]) print(len(ans1)) print(*ans1) elif dmin0: for v,y in BG[u]: if dist2[k][u]==dist2[k-1][v]+y: ans.append(v) u = v k -= 1 flag = True break ans = ans[::-1] if indmin==T: print(len(ans)) print(*ans) else: u = indmin while u!=T: for v,y in G[u]: if dist3[u]==dist3[v]+y: ans.append(v) u = v break print(len(ans)) print(*ans) else: print("Impossible")