// eddy1021
#include <bits/stdc++.h>
using namespace std;
typedef double D;
typedef long double LD;
typedef long long ll;
typedef long long LL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
typedef pair<LD,LD> Pt;
typedef tuple<int,int,int> tiii;
typedef tuple<LL,LL,LL> tlll;
#define mod9 1000000009ll
#define mod7 1000000007ll
#define INF  1023456789ll
#define INF16 10000000000000000ll
#define FI first
#define SE second
#define X FI
#define Y SE
#define PB push_back
#define MP make_pair
#define MT make_tuple
#define eps 1e-9
#define SZ(x) (int)(x).size()
#define ALL(x) (x).begin(), (x).end()
#ifndef ONLINE_JUDGE
#define debug(...) printf(__VA_ARGS__)
#else 
#define debug(...)
#endif
inline ll getint(){
  ll _x=0,_tmp=1; char _tc=getchar();    
  while( (_tc<'0'||_tc>'9')&&_tc!='-' ) _tc=getchar();
  if( _tc == '-' ) _tc=getchar() , _tmp = -1;
  while(_tc>='0'&&_tc<='9') _x*=10,_x+=(_tc-'0'),_tc=getchar();
  return _x*_tmp;
}
inline ll add( ll _x , ll _y , ll _mod = mod7 ){
  ll _ = _x + _y;
  if( _ >= _mod ) _ -= _mod;
  return _;
}
inline ll sub( ll _x , ll _y , ll _mod = mod7 ){
  ll _ = _x - _y;
  if( _ < 0 ) _ += _mod;
  return _;
}
inline ll mul( ll _x , ll _y , ll _mod = mod7 ){
  ll _ = _x * _y;
  if( _ >= _mod ) _ %= _mod;
  return _;
}
ll mypow( ll _a , ll _x , ll _mod ){
  if( _x == 0 ) return 1ll;
  ll _tmp = mypow( _a , _x / 2 , _mod );
  _tmp = mul( _tmp , _tmp , _mod );
  if( _x & 1 ) _tmp = mul( _tmp , _a , _mod );
  return _tmp;
}
ll mymul( ll _a , ll _x , ll _mod ){
  if( _x == 0 ) return 0ll;
  ll _tmp = mymul( _a , _x / 2 , _mod );
  _tmp = add( _tmp , _tmp , _mod );
  if( _x & 1 ) _tmp = add( _tmp , _a , _mod );
  return _tmp;
}
inline bool equal( D _x ,  D _y ){
  return _x > _y - eps && _x < _y + eps;
}
int __ = 1 , _cs;
/*********default*********/
#define N 101010
void build(){

}
int p[ N ] , l[ N ] , r[ N ];
LL n , k , a[ N ];
int find_p( int x ){
  return x == p[ x ] ? x : p[ x ] = find_p( p[ x ] );
}
void uni( int x , int y ){
  x = find_p( x );
  y = find_p( y );
  if( x == y ) return;
  p[ x ] = y;
  l[ y ] = min( l[ y ] , l[ x ] );
  r[ y ] = max( r[ y ] , r[ x ] );
  a[ y ] += a[ x ];
}
void init(){
  n = getint(); k = getint();
  for( int i = 1 ; i <= n ; i ++ ){
    p[ i ] = l[ i ] = r[ i ] = i;
    a[ i ] = getint();
  }
}
priority_queue< PLL > heap;
void solve(){
  for( int i = 1 ; i < n ; i ++ )
    heap.push( { a[ i ] + a[ i + 1 ] , i } );
  vector< int > ans;
  while( heap.size() ){
    PLL tp = heap.top(); heap.pop();
    if( find_p( tp.SE ) == find_p( tp.SE + 1 ) ) continue;
    if( tp.FI != a[ find_p( tp.SE ) ] + a[ find_p( tp.SE + 1 ) ] ) continue;
    if( tp.FI < k ){
      puts( "Impossible" );
      exit( 0 );
    }
    ans.push_back( tp.SE );
    uni( tp.SE , tp.SE + 1 );
    int tmpl = l[ find_p( tp.SE ) ];
    int tmpr = r[ find_p( tp.SE ) ];
    if( tmpl > 1 )
      heap.push( { a[ find_p( tmpl - 1 ) ] + a[ find_p( tmpl ) ] , tmpl - 1 } );
    if( tmpr < n )
      heap.push( { a[ find_p( tmpr ) ] + a[ find_p( tmpr + 1 ) ] , tmpr }  );
  }
  puts( "Possible" );
  reverse( ALL( ans ) );
  for( int i : ans ) printf( "%d\n" , i );
}
int main(){
  build();
  //__ = getint();
  while( __ -- ){
    init();
    solve();
  }
}


Measured memory_bytes: 7148