#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define db double
#define pint pair<int,int>
#define mk make_pair
#define pb push_back
#define eb emplace_back
#define ins insert
#define fi first
#define se second
#define Rep(x,y,z) for(int x=y;x<=z;x++)
#define Red(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
const int MAXN=2e5+5;
char buf[1<<12],*pp1=buf,*pp2=buf,nc;int ny;
inline char gc() {return pp1==pp2&&(pp2=(pp1=buf)+fread(buf,1,1<<12,stdin),pp1==pp2)?EOF:*pp1++;}
//inline char gc(){return getchar();}
inline int read(){
	int x=0;for(ny=1;nc=gc(),(nc<48||nc>57)&&nc!=EOF;)if(nc==45)ny=-1;if(nc<0)return nc;
	for(x=nc-48;nc=gc(),47<nc&&nc<58&&nc!=EOF;x=(x<<3)+(x<<1)+(nc^48));return x*ny;
}
int n,t,v,len[20],p[MAXN],Fl[1<<18],Fr[1<<18],S,a[MAXN];
vector<int>L[20],R[20];
int main(){
//	freopen("std.in","r",stdin);
//	freopen("std.out","w",stdout);
	n=read(),v=read(),t=log2(v)+1,S=(1<<t)-1;
	Rep(i,1,n)p[i]=read();
	Rep(i,0,t){
		len[i]=i?len[i-1]/2:v;
		for(int l=1,r;l<=n;l=r+1){
			for(r=l;r<n&&p[r+1]-p[r]<=len[i];r++);
			L[i].pb(l),R[i].pb(r);
		}
	}
	Rep(sta,0,S)Fr[sta]=n+1,Fl[sta]=0;
	Rep(i,1,t)Fl[1<<i-1]=(*R[i].begin()),Fr[1<<i-1]=(*--L[i].end());
	Rep(sta,1,S)Rep(j,1,t)if(~sta>>(j-1)&1){
		int t=sta|(1<<j-1),pos;
		pos=upper_bound(L[j].begin(),L[j].end(),Fl[sta]+1)-L[j].begin()-1;
		assert(pos>=0&&pos<R[j].size()),Fl[t]=max(Fl[t],R[j][pos]);
		pos=lower_bound(R[j].begin(),R[j].end(),Fr[sta]-1)-R[j].begin();
		assert(pos>=0&&pos<L[j].size()),Fr[t]=min(Fr[t],L[j][pos]);
	}
	Rep(s,0,S){
		int ed=upper_bound(L[0].begin(),L[0].end(),Fl[s]+1)-L[0].begin()-1,st=lower_bound(R[0].begin(),R[0].end(),Fr[S^s]-1)-R[0].begin();
		if(st<=ed)a[st]++,a[ed+1]--;
	}
	for(int i=0;i<L[0].size();i++){
		a[i]+=a[i-1];
		Rep(j,L[0][i],R[0][i])puts(a[i]?"Possible":"Impossible");
	}
	return 0;
}


