#include<bits/stdc++.h>
using namespace std;
#define nn 65536*16
int xi[nn];int n,v;
vector<int> all;
int tol[nn][20],tor[nn][20];
int dpr[nn],dpl[nn],pre[nn];
void _min(int&x,int y){
	x=min(x,y);
}
void _max(int&x,int y){
	x=max(x,y);
}
void build(){
	int u=v/2;while(u) all.push_back(u),u=u/2;all.push_back(0);
	for(int i=0;i<all.size();i++){
		tol[0][i]=tol[1][i]=1;for(int j=2;j<=n;j++)
			if(all[i]>=xi[j]-xi[j-1]) tol[j][i]=tol[j-1][i];
			else tol[j][i]=j;
			
		tor[n+1][i]=tor[n][i]=n;for(int j=n-1;j>=1;j--)
			if(all[i]>=xi[j+1]-xi[j]) tor[j][i]=tor[j+1][i];
			else tor[j][i]=j;
	}

	memset(pre,0x3f,sizeof pre);memset(dpl,0x3f,sizeof dpl);
	dpl[0]=n+1,dpr[0]=0;
	for(int i=0;i<(1<<all.size());i++){
		for(int j=0;j<all.size();j++) if((1<<j)&i);else{
			_min(dpl[i|(1<<j)],tol[dpl[i]-1][j]);
			_max(dpr[i|(1<<j)],tor[dpr[i]+1][j]);
		}
	}
	
	for(int i=0;i<(1<<all.size());i++)
		_min(pre[dpr[i]],dpl[((1<<all.size())-1)^i]);
	for(int i=n-1;i>=0;i--) _min(pre[i],pre[i+1]);
}

int lb[nn],rb[nn];int pa[nn];
int find(int x){
	if(pa[x]==x) return x;
	return pa[x]=find(pa[x]);
}
void link(int x,int y){
	x=find(x),y=find(y);
	pa[x]=y;_min(lb[y],lb[x]);
	_max(rb[y],rb[x]);
}
signed main(){
	scanf("%d%d",&n,&v);for(int i=1;i<=n;i++) scanf("%d",&xi[i]);sort(xi+1,xi+n+1);
	build();
	
	for(int i=1;i<=n;i++) pa[i]=i,lb[i]=rb[i]=i;
	for(int i=1;i<n;i++) if(xi[i+1]-xi[i]<=v) link(i,i+1);
	
	for(int i=1;i<=n;i++){
		int l=lb[find(i)],r=rb[find(i)];
		if(pre[l-1]<=r+1) puts("Possible");
		else puts("Impossible");
	}
	
	return 0;
}