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 P2 = [[0 for _ in range(N+1)] for _ in range(K)] dist2 = [[INFTY for _ in range(N+1)] for _ in range(K)] visited = [[False for _ in range(N+1)] for _ in range(K)] 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-1: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 P2[i+1][k] = (i,j) heapq.heappush(heap,(d+y,i+1,k)) P3 = [0]*(N+1) 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 P3[k] = j heapq.heappush(heap,(d+y,k)) ans3 = [S] u = S while u!=T: u = P3[u] ans3.append(u) 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(ans3)>=K: print("Possible") print(dist3[S]+X[S]) print(len(ans3)) print(*ans3) elif dmin0: k,u = P2[k][u] ans.append(u) ans = ans[::-1] if indmin==T: print(len(ans)) print(*ans) else: u = indmin while u!=T: u = P3[u] ans.append(u) print(len(ans)) print(*ans) else: print("Impossible")