#include<bits/stdc++.h>
using namespace std;

const int maxn=400010;
int n, v, m;
int a[maxn];
int f[1<<20], g[1<<20];
int Next[maxn][30], pre[maxn][30];

void chkmax(int& x,int y){ if(x<y) x=y; }
void chkmin(int& x,int y){ if(x>y) x=y; }

int Log[maxn];
void init(){
	for(int i=2;i<maxn;i++) Log[i]=Log[i>>1]+1;
}

int fa[maxn];
int find(int x){ return x==fa[x] ? x : fa[x]=find(fa[x]); }

int ans[maxn], b[maxn];

int main(){

	init();
	scanf("%d%d", &n, &v);
	int t=v; b[++m]=t;
	while(t){
		b[++m]=t/2;
		t/=2;
	}
	// printf("m = %d\n", m);
	// for(int i=1;i<=m;i++) printf("%d ", b[i]); puts("");
	for(int i=1;i<=n;i++) scanf("%d", &a[i]);
	for(int j=1;j<=m;j++){
		for(int i=1;i<=n;i++) fa[i]=i;
		for(int i=1;i<n;i++) if(a[i+1]-a[i]<=b[j]) fa[find(i)]=find(i+1);
		for(int i=1;i<=n;i++) Next[i][j]=find(i);
		
		for(int i=1;i<=n;i++) fa[i]=i;
		for(int i=1;i<n;i++) if(a[i+1]-a[i]<=b[j]) fa[find(i+1)]=find(i);
		for(int i=1;i<=n;i++) pre[i][j]=find(i);
		// for(int i=1;i<=n;i++) printf("%d ", Next[i][j]); puts("");
	}
	for(int i=0;i<(1<<m);i++) for(int j=1;j<=m;j++) if(!(i & (1<<(j-1)))){
		chkmax(f[i | (1<<(j-1))], Next[ f[i]+1 ][j]);
	}

	for(int i=0;i<(1<<m);i++) g[i]=n+1;
	for(int i=0;i<(1<<m);i++) for(int j=1;j<=m;j++) if(!(i & (1<<(j-1))))
		chkmin(g[i | (1<<(j-1))], pre[ g[i]-1 ][j]);
	for(int i=0;i<(1<<m);i++){ 
		if((i & 1)) continue;
		int j=((1<<m)-1) ^ i ^ 1;
		int l=1, r=Next[l][1];
		while(l<=n){
			if(f[i]>=l-1 && g[j]<=r+1) for(int k=l;k<=r;k++) ans[k]=1;
			l=r+1, r=Next[l][1];
		}
	}
	for(int i=1;i<=n;i++) printf("%s\n", ans[i] ? "Possible" : "Impossible");
	return 0;
}