#include<bits/stdc++.h>
using namespace std;
#define nn 1000008
#define lg 21
int n;
int pos[nn];
struct afd{
	int bel[nn];
	int l[nn],r[nn];
	void init(int v)
	{
		for(int i=1;i<=n;i++)
		{
			if(i==1 or pos[i]-pos[i-1]>v) bel[i]=i,l[i]=r[i]=i;
			else bel[i]=bel[i-1],r[bel[i]]=i; 
		}
	}
}v2[lg];
int l=0;
int v;

void fuckoff()
{
	while(n--) puts("Impossible");
	exit(0);
}
int fl[nn],fr[nn];
void chkmin(int &x,int y) {x=min(x,y);}
void chkmax(int &x,int y) {x=max(x,y);}


int main()
{
	scanf("%d%d",&n,&v);
	for(int i=1;i<=n;i++) scanf("%d",&pos[i]);
	while(v) v2[l++].init(v),v/=2;
	v2[l++].init(v),v/=2;
	
	int cnt=0;
	for(int i=1;i<=n;i++)
		if(v2[0].bel[i]==i)
			cnt++;
	if(cnt>1+l) fuckoff();
	
	for(int ii=1;ii<=n;ii++)
	{
		if(v2[0].bel[ii]==ii)
		{
			int el=v2[0].l[ii],er=v2[0].r[ii];
			
			memset(fl,0x3f,sizeof fl);
			memset(fr,0,sizeof fr);
			
			fl[1]=el;fr[1]=er;
			
			for(int mask=1;mask<(1<<l);mask++)
			{
				if(!(mask&1) or fl[mask]>n) continue;
				for(int i=1;i<l;i++)
				{
					if(mask&(1<<i)) continue;
					int x=v2[i].bel[fl[mask]-1];

					if(!x) chkmin(fl[mask|(1<<i)],fl[mask]);
					else chkmin(fl[mask|(1<<i)],v2[i].l[x]);
				}
			}

			for(int mask=1;mask<(1<<l);mask++)
			{
				if(!(mask&1) or !fr[mask]) continue;
				for(int i=1;i<l;i++)
				{
					if(mask&(1<<i)) continue;
					int x=v2[i].bel[fr[mask]+1];
					
					if(!x) chkmax(fr[mask|(1<<i)],fr[mask]);
					else chkmax(fr[mask|(1<<i)],v2[i].r[x]);
				}
			}
		
			int flag=0;
			for(int mask=0;mask<(1<<l);mask++)
			if(mask&1)
				if(fl[mask]<=1 and fr[(((1<<l)-1)^mask)|1]>=n)
					flag=1;
						
			if(flag)
				for(int i=el;i<=er;i++) puts("Possible");
			else
				for(int i=el;i<=er;i++) puts("Impossible");
		}
	}
	
	return 0;
}