#include<bits/stdc++.h>
using namespace std;

const int MaxN=2e5+5;

int N,M=1;
int V[20],X[MaxN],Mn[MaxN];
int L[MaxN][20],R[MaxN][20],F[1<<18],G[1<<18];

int main(){
	int i,j,l,r;
	scanf("%d%d",&N,&V[0]);
	for(i=V[0]>>1;i;i>>=1)
		V[M++]=i;
	M++;
	reverse(V,V+M);
	for(i=1;i<=N;i++)
		scanf("%d",&X[i]);
	for(i=0;i<M;i++)
		L[1][i]=1,R[N][i]=N;
	for(i=2;i<=N;i++)
		for(j=0;j<M;j++)
			if(X[i]-X[i-1]<=V[j])
				L[i][j]=L[i-1][j];
			else L[i][j]=i;
	for(i=N-1;i;i--)
		for(j=0;j<M;j++)
			if(X[i+1]-X[i]<=V[j])
				R[i][j]=R[i+1][j];
			else R[i][j]=i;
	F[0]=0;
	for(i=0;i<1<<M-1;i++)
		for(j=0;j<M-1;j++)
			if(~i>>j&1)
				F[i|1<<j]=max(F[i|1<<j],F[i]<N?R[F[i]+1][j]:N);
	memset(G,0x3f,sizeof(G));
	G[0]=N+1;
	for(i=0;i<1<<M-1;i++)
		for(j=0;j<M-1;j++)
			if(~i>>j&1)
				G[i|1<<j]=min(G[i|1<<j],G[i]>1?L[G[i]-1][j]:1);
	memset(Mn,0x3f,sizeof(Mn));
	for(i=0;i<1<<M-1;i++)
		Mn[F[i]]=min(Mn[F[i]],G[(1<<M-1)-1-i]);
	for(i=N-1;~i;i--)
		Mn[i]=min(Mn[i],Mn[i+1]);
	for(i=1;i<=N;i++)
		puts(Mn[L[i][M-1]-1]<=R[i][M-1]+1?"Possible":"Impossible");
	return 0;
}