#include<bits/stdc++.h>
typedef long long ll;
ll gi(){
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch))f^=ch=='-',ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return f?x:-x;
}
int x[200010],dv[200010],m,L[200010],R[200010],c[200010];
std::vector<int>P[200010];
int fl[262147],fr[262147];
int main(){
#ifdef XZZSB
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	int n=gi(),V=gi();
	for(int i=1;i<=n;++i)x[i]=gi();
	for(int i=V,j=0;~i;i>>=1,++j){
		dv[j]=i;P[m=j].push_back(0);
		for(int l=1,r;l<=n;l=r+1){
			r=l;while(r<n&&x[r+1]-x[r]<=i)++r;
			P[j].push_back(r);
			if(!j)for(int o=l;o<=r;++o)L[o]=l,R[o]=r;
		}
		if(!i)break;
	}
	for(int i=0;i<1<<m;++i){
		for(int j=1;j<=m;++j){
			if((i>>j-1)&1)continue;
			int p;
			if(fl[i]==n)p=n;
			else p=*std::upper_bound(P[j].begin(),P[j].end(),fl[i]);
			fl[i|(1<<j-1)]=std::max(fl[i|(1<<j-1)],p);
		}
	}
	for(int i=0;i<1<<m;++i)fr[i]=n+1;
	for(int i=0;i<1<<m;++i){
		for(int j=1;j<=m;++j){
			if((i>>j-1)&1)continue;
			int p;
			if(fr[i]==1)p=1;
			else p=*--std::lower_bound(P[j].begin(),P[j].end(),fr[i]-1)+1;
			fr[i|(1<<j-1)]=std::min(fr[i|(1<<j-1)],p);
		}
	}
	for(int i=0;i<1<<m;++i){
		int l=fl[i]+1,r=fr[((1<<m)-1)^i]-1;
		if(l>r)++c[1];
		else if(*std::lower_bound(P[0].begin(),P[0].end(),l)>=r)++c[l],--c[r+1];
	}
	for(int i=1;i<=n;++i)c[i]+=c[i-1];
	for(int i=1;i<=n;++i)puts(c[i]?"Possible":"Impossible");
	return 0;
}
