let n, l = Scanf.scanf "%d %d\n" (fun x y -> x, y)

let rec read_ints acc = function
  | 0 -> List.rev acc
  | k -> read_ints (Scanf.scanf "%d " (fun x -> x) :: acc) (k-1)

let al = read_ints [] n

let rec solve i k = function
  | [] | _ :: [] -> Some ([], [])
  | hd0 :: ((hd1 :: tl1) as tl0) -> if k < l then None else
    match solve (i+1) (k-hd0) tl0 with
    | Some (x, y) -> Some ((i :: x), y)
    | None -> if hd0 + hd1 < l then None else
      match solve (i+1) k (hd0 + hd1 :: tl1) with
      | None -> None
      | Some (x, y) -> Some (x, (i :: y))

let sum = List.fold_left (+) 0 al

let () =
  match solve 1 sum al with
  | None -> print_endline "Impossible"
  | Some (x, y) -> print_endline "Possible"; List.iter (fun x -> print_int x; print_newline ()) (List.append x (List.rev y))