import std.stdio;

void main(){
	auto cin = new Cin();
	
	auto NL = cin.line();
	
	auto rope = cin.line();
	bool[] tied = new bool[](NL[0]-1);
	size_t[] progress;
	
	
	
	check:foreach( i ; 0..1_000_000_007 ){
		
		foreach( j ; 0..tied.length ){
			if( tied[j] ){continue;}
			if( rope[j]+rope[j+1] < NL[1] ){continue;}
			tied[j] = true;
			progress ~= j;
			rope[j] = rope[j+1] = NL[1];
			//rope[j-1] + rope[j];
			continue check;
		}
		
		if( tied[0..$].all!"a==true"() ){
			writeln("Possible");
			foreach_reverse( p ; progress ){
				(p+1).writeln();
			}
		}else{
			writeln("Impossible");
		}
		break;
	}
	
	//possible.writeln();
}
auto solve(){
}
unittest{
	
}


import std.stdio,std.conv,std.string;
import std.algorithm,std.array;

class Cin
{
	T[] line( T = size_t , string token = " " )( size_t m = 1 ){
		T[] arr = [];
		foreach( i ; 0..m ){
			arr ~= this.read!T();
		}
		return arr;
	}
	T[][] rect( T = size_t , string token = " " )( size_t m = 1 ){
		T[][] arr = new T[][](m);
		foreach( i ; 0..m ){
			arr[i] = this.read!T(token);
		}
		return arr;
	}
	private T[] read( T = size_t )( string token = " " ){
		T[] arr;
		foreach( elm ; readln().chomp().split(token) ){
			arr ~= elm.to!T();
		}
		return arr;
	}
}