#include<bits/stdc++.h>
using namespace std ;
#define rep( i, s, t ) for( register int i = s; i <= t; ++ i )
#define re register
int gi() {
	char cc = getchar() ; int cn = 0, flus = 1 ;
	while( cc < '0' || cc > '9' ) {  if( cc == '-' ) flus = - flus ; cc = getchar() ; }
	while( cc >= '0' && cc <= '9' )  cn = cn * 10 + cc - '0', cc = getchar() ;
	return cn * flus ;
}
const int N = 2e5 + 5 ; 
const int M = 15 + 5 ; 
int n, m, w[M], cnt, a[N], st[N], top, Go[M][N], dp[1 << M][M], W[N] ; 
signed main()
{
	n = gi(), m = gi() ;
	rep( i, 1, n ) a[i] = gi() ; 
	while( m ) w[++ cnt] = m, m = m / 2 ; 
	w[++ cnt] = 0 ; 
	int r = 1 ; 
	for( re int k = 1; k <= cnt; ++ k ) {
		r = 1 ; int befr = 0 ; 
		for( re int i = 1; i <= n; ++ i ) {
			r = max( r, i ) ; 
			while( r < n && a[r + 1] - a[max( i, r )] <= w[k] ) ++ r ;  
			Go[k][i] = r ;
			if( ( k == 1 ) && ( r != befr ) ) st[++ top] = r, W[r] = top, befr = r ;
		}
	}
	if( top > cnt ) {
		rep( i, 1, n ) puts("Impossible") ;
		exit(0) ;
	}
	int maxn = ( 1 << cnt ) - 1 ; dp[0][0] = 0 ;
	rep( i, 1, cnt ) Go[i][n + 1] = n ;
	for( re int i = 0; i < maxn; ++ i ) {
		rep( t, 0, top ) {
			for( re int j = 1; j <= cnt; ++ j ) {
				int k = ( 1 << ( j - 1 ) ) ;
				if( ( i & k ) ) continue ;  
				if( j == 1 && t == 0 ) {
					dp[i ^ k][W[Go[j][dp[i][t] + 1]]] = max( dp[i ^ k][W[Go[j][dp[i][t] + 1]]], Go[j][dp[i][t] + 1] ) ;
				}
				else if( j != 1 ) dp[i ^ k][t] = max( dp[i ^ k][t], Go[j][dp[i][t] + 1] ) ;
			}
		}
	}
	rep( i, 1, n ) {
		if( dp[maxn][W[Go[1][i]]] >= n ) puts("Possible") ;
		else puts("Impossible") ;
	}
	return 0 ;
}
