#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define SZ(x) ((int)x.size())
#define L(i,u) for (register int i=head[u]; i; i=nxt[i])
#define rep(i,a,b) for (register int i=(a); i<=(b); i++)
#define per(i,a,b) for (register int i=(a); i>=(b); i--)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef pair<int,int> Pii;
typedef vector<int> Vi;
template<class T> inline void read(T &x){
	x=0; char c=getchar(); int f=1;
	while (!isdigit(c)) {if (c=='-') f=-1; c=getchar();}
	while (isdigit(c)) {x=x*10+c-'0'; c=getchar();} x*=f;
}
template<class T> inline void umin(T &x, T y){x=x<y?x:y;}
template<class T> inline void umax(T &x, T y){x=x>y?x:y;}
inline ui R() {
	static ui seed=416;
	return seed^=seed>>5,seed^=seed<<17,seed^=seed>>13;
}
const int N = 233333;
int n,v,a[N],len,bh[20][N],num;Vi e[N*20];
struct Seg{
	int r[N];
	void init(int x){
		per(i,n,1){r[i]=i;if(i+1<=n&&a[i+1]-a[i]<=x)r[i]=r[i+1];}
		
	}
}b[20];
map<Vi,bool>Map[20];
bool ck(int dep, Vi c){
	if(SZ(c)>len-dep+1)return 0;if(dep==len||!SZ(c))return 1;
	if(Map[dep].count(c))return Map[dep][c];
	bool ok=0;
	rep(i,0,SZ(c)-1){
		Vi d;rep(j,0,SZ(c)-1)if(i!=j)rep(k,0,SZ(e[c[j]])-1)d.pb(e[c[j]][k]);
		if(ck(dep+1,d)){ok=1;break;}
	}
	return Map[dep][c]=ok;
}
int main() {
	read(n);read(v);rep(i,1,n)read(a[i]);
	while(1){b[++len].init(v);if(!v)break;v/=2;}
	rep(i,1,len)rep(j,1,n)if(b[i].r[j]!=b[i].r[j-1])bh[i][j]=++num;
	rep(i,1,len-1)rep(j,1,n)if(bh[i][j]){
		for(int k=j;k<=b[i].r[j];k=b[i+1].r[k]+1)
			e[bh[i][j]].pb(bh[i+1][k]);
	}
	Vi top;rep(i,1,n)if(bh[1][i])top.pb(bh[1][i]);
	if(SZ(top)>=20){
		rep(i,1,n)puts("Impossible");return 0;
	}
	for(int i=1;i<=n;i=b[1].r[i]+1){
		Vi c;rep(j,0,SZ(top)-1)if(top[j]!=bh[1][i])rep(k,0,SZ(e[top[j]])-1)c.pb(e[top[j]][k]);
		bool ok=ck(2,c);
		rep(j,i,b[1].r[i])printf("%s\n",ok?"Possible":"Impossible");
	}
	return 0;
}
