const bool submit = 1;
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) if(!submit) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
template<class S,class T> ostream& operator<<(ostream& o,const pair<S,T> &p){return o<<"("<<p.fs<<","<<p.sc<<")";}
template<class T> ostream& operator<<(ostream& o,const vector<T> &vc){o<<"sz = "<<vc.size()<<endl<<"[";for(const T& v:vc) o<<v<<",";o<<"]";return o;}
bool B(int x,int i){return (x>>i)&1;}
int N,V;
const int MN=200000;
const int MD=20;
int D;
int x_[MN];
int d[MN-1];
int xv2id[MN][MD];

const int MX=MN*MD;
int id2v[MX];
int id2l[MX];
int id2r[MX];
int I;


bool ans[MN];

int dp[1<<20];
int main(){
	cin>>N>>V;
	rep(i,N) cin>>x_[i];
	rep(i,N-1) d[i]=x_[i+1]-x_[i];
	rep(v,MD){
		int l=0;
		rep(x,N){
			if(x==N-1 || d[x]>V){
				for(int i=l;i<=x;i++) xv2id[i][v]=I;
				id2v[I]=v;
				id2l[I]=l;
				id2r[I]=x+1;

				// show(I);
				// show(v);
				// printf("(%d,%d]\n",l,x+1);
				// puts("");
				I++;
				l=x+1;
			}
		}
		if(V==0){
			D=v+1;
			break;
		}
		V/=2;
	}
	int K = xv2id[N-1][0]+1;

	if(K>D){
		rep(i,N){
			puts("Impossible");
		}
		return 0;
	}

	show(D);
	show(K);
	rep(elim,K){
		rep(b,1<<D) dp[b]=0;
		bool ok=0;
		rep(b,1<<D){
			int x = dp[b];
			if(x==N){
				ok=1;
				break;
			}
			rep(i,D) if(!B(b,i)){
				int id = xv2id[x][i];
				if(i==0&&id!=elim) continue;
				int nx=max(x,id2r[id]);
				chmax(dp[b|(1<<i)],nx);
			}
//			printf("dp[%d]=%d\n",b,dp[b]);
		}
		int l = id2l[elim];
		int r = id2r[elim];
		for(int x=l;x<r;x++) ans[x]=ok;
	}
	rep(i,N){
		if(ans[i]) puts("Possible");
		else puts("Impossible");
	}
}
