#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=400100;
int dpl[maxn],dpr[maxn];
int val[maxn];
int nex[maxn][20],las[maxn][20];
int a[maxn];
int b[20],k=-1;
int f[maxn];
int main(){
//	freopen("E.in","r",stdin);
//	freopen("E.out","w",stdout);
	int n,v;
	scanf("%d%d",&n,&v);
	while(v){
		b[++k]=v;
		v/=2;
	}
	b[++k]=0;
	for(int i=0;i<=k;i++)
		if(i<k-i)
			swap(b[i],b[k-i]);

	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int j=0;j<=k;j++)
	{
		nex[n][j]=n;
		nex[n+1][j]=n;
		las[1][j]=1;
		las[0][j]=1;
	}
	for(int i=n-1;i>=1;i--)
		for(int j=0;j<=k;j++)
		{
			if(a[i+1]-a[i]<=b[j])
				nex[i][j]=nex[i+1][j];
			else
				nex[i][j]=i;
		}
	for(int i=2;i<=n;i++)
		for(int j=0;j<=k;j++)
		{
			if(a[i]-a[i-1]<=b[j])
				las[i][j]=las[i-1][j];
			else
				las[i][j]=i;
		}


	for(int i=0;i<(1<<k);i++){
		for(int j=0;j<k;j++){
			if(i&(1<<j)) continue;
			if(nex[dpl[i]+1][j]>dpl[i|(1<<j)])
				dpl[i|(1<<j)]=nex[dpl[i]+1][j];
		}
	}

	for(int i=0;i<(1<<k);i++)
		dpr[i]=n+1;
	for(int i=0;i<(1<<k);i++){
		for(int j=0;j<k;j++){
			if(i&(1<<j)) continue;
			if(las[dpr[i]-1][j]<dpr[i|(1<<j)])
				dpr[i|(1<<j)]=las[dpr[i]-1][j];
		}
	}

	for(int i=1;i<=n;i++)
		f[i]=n+1;
	for(int i=0;i<(1<<k);i++)
		if(dpr[((1<<k)-1)^i]-1<f[dpl[i]+1])
			f[dpl[i]+1]=dpr[((1<<k)-1)^i]-1;

	int r,mn;
	for(int i=1;i<=n;i=r+1){
		r=nex[i][k],mn=n+1;
		for(int j=i;j<=r;j++)
			if(f[j]<mn) mn=f[j];
		if(mn<=r){
			for(int j=i;j<=r;j++)
				printf("Possible\n");
		}
		else{
			for(int j=i;j<=r;j++)
				printf("Impossible\n");
		}
	}
	return 0;
}
