//by xiqiao
#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
typedef long long ll;
int n;
int l[maxn][30],r[maxn][30];
int a[maxn];
void pre_work(int wh,int v){
	l[0][wh]=0;l[1][wh]=0;
	for(int i=2;i<=n;i++){
		if(a[i-1]-a[i-2]<=v)l[i][wh]=l[i-1][wh];
		else l[i][wh]=i-1;
	}
	r[n][wh]=n;r[n-1][wh]=n;
	for(int i=n-2;i>=0;i--){
		if(a[i+1]-a[i]<=v)r[i][wh]=r[i+1][wh];
		else r[i][wh]=i+1;
	}
}
int f[maxn*3],f2[maxn*3];
int main(){
	//freopen("1.in","r",stdin);
	int V;
	scanf("%d%d",&n,&V);
	for(int i=0;i<n;i++)scanf("%d",&a[i]);
	int g=0;
	for(int x=V;x;x>>=1){
		pre_work(g++,x);
	}
	pre_work(g++,0);
	for(int i=0;i<(1<<g);i++)f[i]=0;
	for(int i=0;i<(1<<g);i++){
		for(int j=0;j<g;j++){
			if((1<<j)&i)continue;
			f[i|(1<<j)]=max(f[i|(1<<j)],r[f[i]][j]);
		}
	}
	for(int i=0;i<(1<<g);i++)f2[i]=n;
	for(int i=0;i<(1<<g);i++){
		for(int j=0;j<g;j++){
			if((1<<j)&i)continue;
			f2[i|(1<<j)]=min(f2[i|(1<<j)],l[f2[i]][j]);
		}
	}
	if(f[(1<<g)-1]<n){
		for(int i=0;i<n;i++)puts("Impossible");
		return 0;
	}
	int L,R;L=1;
	for(L=0;L<n;L=R){
		bool ok=0;R=r[L][0];
		for(int j=0;j<(1<<g);j++){
			if(j&1)continue;
			if(f[j]>=L && f2[(1<<g)-2-j]<=R){
				ok=1;break;
			}
		}
		for(int j=L;j<R;j++){
			if(!ok)puts("Impossible");
			else puts("Possible");
		}
	}
	return 0;
}