#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n,v[20],x[N],dep,dpl[N],dpr[N];
int blo[20][N],L[20][N],R[20][N];
void init(int dep){
	int cnt=0;
	blo[dep][1]=L[dep][1]=R[dep][1]=cnt=1;
	for (int i=2;i<=n;i++){
		if (x[i-1]+v[dep]>=x[i]) blo[dep][i]=cnt,R[dep][cnt]++;else
		blo[dep][i]=++cnt,L[dep][cnt]=R[dep][cnt]=i;
	}
	L[dep][0]=1;R[dep][0]=n;
}
bool ans[N];
int main()
{
	scanf("%d%d",&n,&v[0]);
	while (v[dep]) v[dep+1]=v[dep]>>1,dep++;
	for (int i=1;i<=n;i++) scanf("%d",&x[i]);
	for (int i=0;i<=dep;i++) init(i);
	int U=(1<<dep)-1;
	for (int S=1;S<=U;S++)
	for (int i=0;i<dep;i++)
	if (S>>i&1) dpl[S]=max(dpl[S],R[i+1][blo[i+1][dpl[S^(1<<i)]+1]]);
	for (int S=0;S<=U;S++) dpr[S]=n+1;
	for (int S=1;S<=U;S++)
	for (int i=0;i<dep;i++)
	if (S>>i&1) dpr[S]=min(dpr[S],L[i+1][blo[i+1][dpr[S^(1<<i)]-1]]);
	if (blo[0][n]<=20){
		for (int i=1;i<=blo[0][n];i++){
			int l=L[0][i],r=R[0][i];bool ok=0;
			for (int S=0;S<=U;S++)
			if (dpl[S]>=l-1&&dpr[U^S]<=r+1) ok=1;
			if (!ok) continue;
			for (int j=l;j<=r;j++) ans[j]=1;
		}
	}
	for (int i=1;i<=n;i++) puts(ans[i]?"Possible":"Impossible");
	return 0;
}