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

const int maxn=2e5+10;

int n,m,v,x[maxn],Lg[19][maxn],Rg[19][maxn];
int L[1<<18],R[1<<18];

int main()
{
#ifdef h10
	freopen("E.in","r",stdin);
	freopen("E.out","w",stdout);
#endif
	int i,j,v0,S;
	scanf("%d%d",&n,&v);
	for (i=1;i<=n;i++)
		scanf("%d",&x[i]);
	x[0]=x[1]-23333333;
	x[n+1]=x[n]+23333333;
	for (v0=v,m=0;;v0>>=1,m++)
	{
		j=1;
		for (i=j=1;i<=n;i++)
		{
			j=max(i,j);
			while (x[j+1]-x[j]<=v0) j++;
			Rg[m][i]=j;
		}
		for (i=j=n;i>=1;i--)
		{
			j=min(i,j);
			while (x[j]-x[j-1]<=v0) j--;
			Lg[m][i]=j;
		}
		if (!v0) break;
	}
	int cnt=0;
	for (i=1;i<=n;i=j+1)
		j=Rg[0][i],cnt++;
	if (cnt>m+1)
	{
		for (i=1;i<=n;i++)
			puts("Impossible");
		return 0;
	}
	for (S=0;S<1<<m;S++)
		R[S]=0,L[S]=n+1;
	for (S=1;S<1<<m;S++)
	{
		for (i=0;i<m;i++)
			if ((S>>i)&1)
			{
				R[S]=max(R[S],Rg[i+1][R[S-(1<<i)]+1]);
				L[S]=min(L[S],Lg[i+1][L[S-(1<<i)]-1]);
			}
	}
	for (i=1;i<=n;i=j+1)
	{
		j=Rg[0][i];
		bool flag=0;
		for (S=0;S<1<<m;S++)
			flag|=R[S]+1>=i&&L[(1<<m)-1-S]-1<=j;
		for (int x=i;x<=j;x++)
			puts(flag?"Possible":"Impossible");
	}
}
