#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 200010
#define MAXS 1000010
using namespace std;

int read(){
	char c;
	while(((c=getchar())<'0' || c>'9') && c!='-');
	int flag=1;
	int res=c-'0';
	if(c=='-'){
		flag=-1;
		res=0;
	}
	while((c=getchar())>='0' && c<='9') res=res*10+c-'0';
	return res*flag;
}

int n,m,v0,maxs;
int a[MAXN];
int lim[MAXN];
int f1[MAXS],f2[MAXS];
int p[20][MAXN][2];

void calcP(int l){
	int last=1;
	for(int i=1;i<=n;i++){
		if(i==n || a[i+1]-a[i]>lim[l]){
			for(int j=last;j<=i;j++){
				p[l][j][0]=last;
				p[l][j][1]=i;
			}
			last=i+1;
		}
	}
	p[l][0][0]=1;
	p[l][n+1][1]=n;
}

void dp(){
	f1[0]=0; f2[0]=n+1;
	for(int s=1;s<maxs;s++){
		f2[s]=n+1;
		for(int i=1,l=1;i<=m;i++,l<<=1)
			if(s&l){
				f1[s]=max(f1[s],p[i][f1[s^l]+1][1]);
				f2[s]=min(f2[s],p[i][f2[s^l]-1][0]);
			}
	}
}

namespace Fenwick{
	int c[MAXN];

	void init(){ memset(c,-1,sizeof c); }

	void insert(int x,int y){
		x++;
		while(x<=n+2){
			c[x]=max(c[x],y);
			x+=x&(-x);
		}
	}

	int getmax(int x){
		x++;
		int res=-1;
		while(x){
			res=max(res,c[x]);
			x-=x&(-x);
		}
		return res;
	}
}

int main(){
#ifdef DEBUG
	freopen("g012e.in","r",stdin);
#endif
	n=read(); v0=read();
	for(int i=1;i<=n;i++) a[i]=read();
	lim[0]=v0;
	while(v0) lim[++m]=(v0/=2);
	maxs=1<<m;
	for(int i=0;i<=m;i++) calcP(i);
	dp();
	Fenwick::init();
	for(int i=0;i<maxs;i++)
		Fenwick::insert(f2[i],f1[(maxs-1)^i]);
	for(int i=1;i<=n;i++)
		if(p[0][i][0]==i){
			int res=Fenwick::getmax(p[0][i][1]+1);
			if(res>=i-1)
				for(int j=p[0][i][0];j<=p[0][i][1];j++)
					puts("Possible");
			else
				for(int j=p[0][i][0];j<=p[0][i][1];j++)
					puts("Impossible");
		}
	return 0;
}
