#include <stdio.h>
#include <string.h>
#include <algorithm>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define fill(x,t) memset(x,t,sizeof(x))

const int N=400005;

int f[N],g[N],p[N],L[N],R[N],ans[N];
int left[25][N],righ[25][N],bel[N];
int n,V,tot;

int read() {
	int x=0,v=1; char ch=getchar();
	for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());
	for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());
	return x*v;
}

void pre(int v,int id) {
	for (int i=1,j;i<=n;i=j+1) {
		for (j=i;j<n&&p[j+1]-p[j]<=v;) j++;
		rep(k,i,j) left[id][i]=j,righ[id][j]=i;
	}
}

void solve() {
	for (int i=0,lim=(1<<tot);i<lim;++i) {
		g[i]=n+1;
	}
	for (int i=0,lim=(1<<tot);i<lim;++i) {
		rep(j,0,tot-1) if ((i>>j)&1) {
			f[i]=std:: max(f[i],left[j][f[i-(1<<j)]+1]);
			g[i]=std:: min(g[i],righ[j][g[i-(1<<j)]-1]);
		}
	}
	for (int i=0,lim=(1<<tot);i<lim;++i) {
		int j=lim-i-1;
		if (f[i]+1>=L[bel[f[i]+1]]&&g[j]-1<=R[bel[f[i]+1]]) {
			ans[bel[f[i]+1]]=1;
		}
	}
}

int main(void) {
	fill(righ,63);
	n=read(),V=read();
	rep(i,1,n) p[i]=read();
	for (int v=V/2;;v>>=1) {
		pre(v,tot++);
		if (!v) break;
	}
	for (int i=1,j;i<=n;i=j+1) {
		bel[i]=++bel[0];
		for (j=i;j<n&&p[j+1]-p[j]<=V;) bel[++j]=bel[0];
		L[bel[0]]=i,R[bel[0]]=j;
	}
	solve();
	rep(i,1,n) if (ans[bel[i]]) puts("Possible");
	else puts("Impossible");
	return 0;
}