#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int N=800005;

int n,v,tot,cnt;
int x[N],R[22][N],L[22][N],b[22],id[N],p1[N],p2[N],f[N],g[N],ans[N];

void init(){
	int i,j,k,l;
	memset(L,0x3f,sizeof(L));
	for (i=0;i<tot;i++){
		for (j=1;j<=n;j=k+1){
			k=j;
			while (k<n&&x[k+1]-x[k]<=b[i]) k++;
			for (l=j;l<=k;l++){
				L[i][l]=j; R[i][l]=k;
			}
		}
	}
	for (i=1;i<=n;i=k+1){
		k=i; cnt++;
		while (k<n&&x[k+1]-x[k]<=b[tot]) k++;
		for (l=i;l<=k;l++){
			id[l]=cnt;
			p1[cnt]=i; p2[cnt]=k;
		} 
	}
}

void work(){
	int i,j,sz,s,ss,l,r;
	sz=(1<<tot)-1;
	for (i=0;i<=sz;i++) f[i]=n+1;
	for (s=0;s<=sz;s++){
		for (j=0;j<tot;j++)
			if (!((s>>j)&1)){
				ss=s|(1<<j);
				f[ss]=min(f[ss],L[j][f[s]-1]);
				g[ss]=max(g[ss],R[j][g[s]+1]);
			}
	}
	for (s=0;s<=sz;s++){
		l=g[s]; r=f[sz^s];
		if (l+1>=r){
			for (i=1;i<=n;i++) ans[i]=1;
			return;
		}
		if (p1[id[l+1]]<=l+1&&p2[id[l+1]]>=r-1) ans[id[l+1]]=1;
	}
}

int main(){
	int i;
	scanf("%d%d",&n,&v);
	for (i=1;i<=n;i++) scanf("%d",&x[i]);
	b[0]=0;
	while (v){
		b[++tot]=v;
		v/=2;
	}
	sort(b,b+tot+1);
	init();
	work();
	for (i=1;i<=n;i++)
		if (ans[id[i]]) printf("Possible\n");
	else printf("Impossible\n");
	return 0;
}