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