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

const int N=200010;
int n,m,v[20],x[N],f[N][20],g[N][20],F[1<<20],G[1<<20],ans[1<<20];

void work()
{
	scanf("%d %d",&n,&v[0]);
	for (int i=1; i<=n; i++)  scanf("%d",&x[i]);
	for (int t=v[0]; (v[++m]=t/=2); );
	x[0]=-int(2e9),x[n+1]=-x[0];
	for (int i=n; i; i--)
		for (int j=1; j<=m; j++)
			if (x[i+1]-x[i]<=v[j])  f[i][j]=f[i+1][j];
			else  f[i][j]=i;
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			if (x[i]-x[i-1]<=v[j])  g[i][j]=g[i-1][j];
			else  g[i][j]=i;
	for (int i=0; i<(1<<m); i++)  G[i]=n+1;
	for (int i=1; i<(1<<m); i++)
		for (int j=1,k; j<=m; j++)
			if (i&(1<<(j-1)))
				k=i-(1<<(j-1)),F[i]=max(F[i],f[F[k]+1][j]),G[i]=min(G[i],g[G[k]-1][j]);
	for (int i=0; i<=n; i++)  ans[i]=n+2;
	for (int i=0; i<(1<<m); i++)  ans[F[i]]=min(ans[F[i]],G[(1<<m)-1-i]);
	for (int i=n-1; i>=0; i--)  ans[i]=min(ans[i],ans[i+1]);
	for (int l,r=1; r<=n; r++)
		{
			l=r;
			while ((r<n)&&(x[r+1]-x[r]<=v[0]))  r++;
			for (int i=l; i<=r; i++)
				puts(ans[l-1]<=r+1?"Possible":"Impossible");
		}
}

int main()
{
	work();
	return 0;
}
