module A = Array
module C = Char
module I = Int64
module L = List
module Q = Queue

let pf = Printf.printf
let sf = Scanf.scanf
let ssf = Scanf.sscanf

let read_int () = sf "%d " (fun x -> x)
let read_float () = sf "%f " (fun x -> x)
let read_array read n = A.init n (fun _ -> read ())
let err s = raise (Failure s)

let inf = int_of_float 1e18
let eps = 1e-11

module S = struct
  include String
  let of_array a = String.init (A.length a) (A.get a)
  let to_array s = A.init (String.length s) (String.get s)
end;;

let _ =
  let n = read_int () in
  let len = read_int () in
  let a = read_array read_int n in
  let (max_len, pos) = A.init (n - 1) (fun x -> x) |>
                         A.map (fun i -> (a.(i) + a.(i + 1), i)) |>
                         A.fold_left max (0, 0) in
  if max_len >= len
  then A.append (A.init pos (fun x -> x+1)) (A.init (n-pos-1) (fun x -> n-x-1)) |>
         ( print_endline "Possible";
           A.iter (fun x -> string_of_int x |> print_endline) )
  else print_endline "Impossible"
