#include"bits/stdc++.h"
#define F(i,j,n) for(register int i=j;i<=n;i++)
#define D(i,j,n) for(register int i=j;i>=n;i--)
#define ll long long
#define N 200010
using namespace std;
namespace io{
	const int L=(1<<19)+1;
	char ibuf[L],*iS,*iT,c;int f;
	char gc(){
		if(iS==iT){
			iT=(iS=ibuf)+fread(ibuf,1,L,stdin);
			return iS==iT?EOF:*iS++;
		}
		return*iS++;
	}
	template<class I>void gi(I&x){
		for(f=1,c=gc();c<'0'||c>'9';c=gc())if(c=='-')f=-1;
		for(x=0;c<='9'&&c>='0';c=gc())x=x*10+(c&15);x*=f;
	}
};
using io::gi;
using io::gc;
int f[N],s[N],nxt[20][N],g[20][N],x[N],n,m,h,v,d,p;
void pre(int v){
	if(!v)return;pre(v/2);
	h=0;d++;
	F(i,1,m)
		if(x[f[i]]>v)f[++h]=f[i];
		else nxt[d][f[i-1]]=f[i];
	m=h;
//	F(i,1,m)printf("%d ",f[i]);puts("");
}
int dfs(int d,int m){
	if(!m)return 1;int h=0;
//	F(i,1,m)printf("%d ",g[d][i]);puts("");
	F(i,1,m)for(int j=g[d][i];j;j=nxt[d][j]){
		s[++h]=j;
		if(h>d)return 0;
	}
//	F(i,1,h)printf("%d ",s[i]);puts("\n");
	if(h==1)return 1;
	F(i,1,h)g[d][i]=s[i];
	F(i,1,h){
		m=0;
		F(j,1,h)if(j!=i)g[d-1][++m]=g[d][i];
		if(dfs(d-1,m))return 1;
	}
	return 0;
}
int main(){
	gi(n);gi(v);
	F(i,1,n)gi(x[i]);
	D(i,n,2)x[i]-=x[i-1];
	x[1]=v+1;F(i,1,n)f[++m]=i;
	pre(v);f[m+1]=n+1;
//	printf("%d\n",d);
//	F(i,1,d){F(j,1,n)printf("%d ",nxt[i][j]);puts("");}puts("");
	if(m>d+1){F(i,1,n)puts("Impossible");return 0;}
	F(i,1,m){
		h=0;
		F(j,1,m)if(j!=i)g[d][++h]=f[j];
		p=dfs(d,h);
		F(j,f[i],f[i+1]-1)puts(p?"Possible":"Impossible");
	}
	return 0;
}
