import heapq N,S,T,K = map(int,input().split()) X = [0]+list(map(int,input().split())) M = int(input()) BG = {i:[] for i in range(1,N+1)} for _ in range(M): a,b,y = map(int,input().split()) BG[b].append((a,y+X[b])) INFTY = 10**15 dp = [[INFTY for _ in range(N+1)] for _ in range(2)] P = {} dp[0][S] = X[S] for i in range(1,K): for j in range(1,N+1): dp[i%2][j] = INFTY for k,y in BG[j]: if dp[i%2][j] > dp[(i-1)%2][k]+y: dp[i%2][j] = dp[(i-1)%2][k]+y P[(i,j)]=(i-1,k) 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)) dmin = INFTY indmin = T for j in range(1,N+1): dist_ = dp[(K-1)%2][j]+dist[j] if dist_=INFTY: print("Impossible") else: ans = [S] u = S while u!=T: u = Pa[u] ans.append(u) if len(ans)>=K: print("Possible") print(dist[S]+X[S]) print(len(ans)) print(*ans) elif dmin0: k,u = P[(k,u)] ans.append(u) ans = ans[::-1] u = indmin while u!=T: u = Pa[u] ans.append(u) print(len(ans)) print(*ans) else: print("Impossible")