#include<bits/stdc++.h>

#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pb2 pop_back
#define pf push_front
#define pf2 pop_front
#define line printf("\n")
#define rep(k,i,j) for(int k = (int)i;k<(int) j;k++)
#define repd(k,i,j) for(int k = i;k>=(int)j;k--)
#define ll long long
#define pq priority_queue

int dirx[8] = {0,1,0,-1,1,1,-1,-1};
int diry[8] = {1,0,-1,0,1,-1,1,-1};

const int INF = 1e9+7;
const ll INFLL = 1e16;
const double EPS = 1e-6;

using namespace std;

const int maxn = 2e5+5;

int n,v;
int loc[maxn];

int jump[maxn][20],m;

int dp[maxn*10];

int ch[maxn*10];

int in_q[maxn*10];

queue<int> q;
int solve(){
	while(q.size())q.pop();
	memset(dp,-1,sizeof dp);
	memset(in_q,0,sizeof in_q);
	
	q.push(1);
	dp[1] = ch[0];
	in_q[1] = 1;
	
	
	while(q.size()){
		int mask = q.front();
		int a = dp[mask];
		
		q.pop();
		in_q[mask] = 0;
		
		if(a==n)return 1;
		rep(k,0,m)if(((1<<k)&mask)==0){
			int b = ch[jump[a][k]];
			int maskb = (mask|(1<<k));
			
			if(dp[maskb]<b){
				dp[maskb] = b;
				if(!in_q[maskb])q.push(maskb),in_q[maskb] = 1;
			}
		}
	}
	
	return 0;
}
int main(){
	scanf("%d%d",&n,&v);
	
	rep(k,0,n)scanf("%d",&loc[k]);
	
	
	for(;v>=0;v/=2){
		rep(k,0,n){
			int i = k;
			while(i<n){
				if(i<n-1 && loc[i+1]-loc[i]<=v){
					i++;
				}
				else break;
			}
			while(k<=i)jump[k++][m] = i+1;
			k = i;
		}
		//printf("%d \n",v);
		m++;
		if(v==0)break;
	}
	
	if(m>=20)return 0;
	
	rep(k,0,maxn)ch[k] = k;
	
	int hit = 0;
	rep(k,0,n){
		if(hit>20){
			printf("Impossible\n");
			continue;
		}
		int nxt = jump[k][0];
		
		hit++;
		ch[k] = nxt;
		int ret = solve();
		ch[k] = k;
		
		while(k<nxt)printf("%s\n",ret?"Possible":"Impossible"),k++;
		k = nxt-1;
	}
	
	return 0;
}