#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define M 200020
#define INF 1000001000
using namespace std;
int read(){
	int nm=0,fh=1; int cw=getchar();
	for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
	for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
	return nm*fh;
}
int tot,n,m,pos[M],L[M][21],R[M][21],V[40],rt;
int RF[M<<3],LF[M<<3],G[M],D[M],MAXN;
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) pos[i]=read(),D[i]=pos[i]-pos[i-1],G[i]=-(INF<<1);
	while(m) V[tot++]=m,m>>=1; tot++;
	for(int k=0;k<tot;k++){
		for(int i=1;i<=n;i++){
			R[i][k]=max(R[i-1][k]-1,1);
			while(i+R[i][k]<=n&&D[i+R[i][k]]<=V[k]) R[i][k]++;
		}
		for(int i=n;i;i--){
			L[i][k]=max(L[i+1][k]-1,1);
			while(i-L[i][k]>0&&D[i-L[i][k]+1]<=V[k]) L[i][k]++;
		}
	} MAXN=(1<<tot);
	for(int i=2;i<MAXN;i+=2){
		for(int k=1;k<tot;k++){
			int w=(1<<k); if(!(i&w)) continue;
			LF[i]=max(LF[i],LF[i^w]+R[LF[i^w]+1][k]);
			RF[i]=max(RF[i],RF[i^w]+L[n-RF[i^w]][k]);
		} LF[i]=min(LF[i],n),RF[i]=min(RF[i],n);
	}
	for(int k=0;k<MAXN;k+=2) G[LF[k]]=max(G[LF[k]],RF[(MAXN-2)^k]);
	for(int i=n-1;i>=0;i--) G[i]=max(G[i],G[i+1]);
	for(int i=1;i<=n;i++) puts(G[i-L[i][0]]+R[i][0]+i-1>=n?"Possible":"Impossible");
	return 0;
}