#include <bits/stdc++.h>
using namespace std;
int read(){
	int x=0,f=1;
	char ch=getchar();
	while (!isdigit(ch)&&ch!='-')
		ch=getchar();
	if (ch=='-')
		f=-1,ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x*f;
}
const int N=1050005;
int n,v;
int x[N];
int R[20][N],L[20][N],mR[N],mL[N];
int Max[N];
int main(){
	n=read(),v=read();
	for (int i=1;i<=n;i++)
		x[i]=read();
	int d;
	for (d=0;d<20;d++){
		int k=v>>d;
		for (int i=1,j;i<=n;i=j+1){
			for (j=i;j<n&&x[j+1]-x[j]<=k;j++);
			for (int k=i;k<=j;k++)
				L[d][k]=i,R[d][k]=j;
		}
		if (k==0)
			break;
	}
	for (int i=0;i<=d;i++)
		R[i][n+1]=n,L[i][0]=1;
	for (int i=0;i<(1<<d);i++)
		mR[i]=0,mL[i]=n+1;
	for (int i=1;i<(1<<d);i++)
		for (int j=0;j<d;j++)
			if (i>>j&1){
				mR[i]=max(mR[i],R[j+1][mR[i^(1<<j)]+1]);
				mL[i]=min(mL[i],L[j+1][mL[i^(1<<j)]-1]);
			}
	int base=(1<<d)-1;
	memset(Max,-1,sizeof Max);
	for (int i=0;i<(1<<d);i++){
		int x=i,y=i^base;
		Max[mL[x]]=max(Max[mL[x]],mR[y]);
	}
	for (int i=2;i<=n+1;i++)
		Max[i]=max(Max[i],Max[i-1]);
	for (int i=1;i<=n;i++){
		int l=L[0][i],r=R[0][i];
		puts(Max[r+1]>=l-1?"Possible":"Impossible");
	}
	return 0;
}