#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 200010
#define LG 25
int R[LG][MAXN],L[LG][MAXN],fl[4194304],fr[4194304];
int V[LG],cnt,X[MAXN],lg,tot,n,x[MAXN];
void Min(int &x,int y)
{
	if(x>y) x=y;
}
void Max(int &x,int y)
{
	if(x<y) x=y;
}
int main()
{
	scanf("%d%d",&n,&V[0]);
	for(int i=1;i<=n;i++)
		scanf("%d",&x[i]);
	while(V[lg])
		V[++lg]=V[lg-1]/2;
	for(int i=0;i<=lg;i++)
	{
		int ls=0;
		for(int j=2;j<=n+1;j++)
			if(x[j]-x[j-1]>V[i]||j==n+1)
			{
				for(int k=ls;k<j-1;k++)
					L[i][k]=j-1;
				for(int k=ls+2;k<=j;k++)
					R[i][k]=ls+1;
				ls=j-1;
				if(i==0) X[++cnt]=j-1;
			}
	}
	if(cnt>lg+1)
	{
		for(int i=1;i<=n;i++)
			printf("Impossible\n");
		return 0;
	}
	tot=1<<(lg+1);
	for(int i=0;i<tot;i+=2)
		fr[i]=n+1;
	for(int i=0;i<tot;i+=2)
		for(int j=1;j<=lg;j++)
			if((i&(1<<j))==0)
			{
				Max(fl[i|(1<<j)],L[j][fl[i]]);
				Min(fr[i|(1<<j)],R[j][fr[i]]);
			}
	for(int i=1;i<=cnt;i++)
	{
		bool flag=0;
		for(int j=0;j<tot;j+=2)
			if(fl[j]>=X[i-1]&&fr[tot-j-2]<=X[i]+1)
			{
				flag=1;
				break;
			}
		for(int j=X[i-1]+1;j<=X[i];j++)
			if(flag) printf("Possible\n");
			else printf("Impossible\n");
	}
}