#include<bits/stdc++.h>
#include<vector>
#define N 200005
using namespace std;
vector<int> G[N];
int n,m,v,a[N],r[20][N],f[1<<20],g[1<<20],ufs[20][N];
int find(int op,int x){ return ufs[op][x] ? ufs[op][x]=find(op,ufs[op][x]) : x;}
int main()
{
	int i,j,x,p,y,T;
	scanf("%d %d",&n,&v);
	for(i=v,m=0;i;i>>=1,m++);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<=m;i++){
		for(j=1;j<=n;j++) r[i][j]=j;
		for(j=1;j<n;j++)
			if(a[j+1]-a[j]<=(v>>i))
				x=find(i,j),ufs[i][j+1]=x,r[i][x]=j+1;
	  }
	for(i=1;i<(1<<m);i++)
		for(j=0;j<m;j++)
			if((i>>j)&1){
				x=r[j+1][find(j+1,min(f[i^(1<<j)]+1,n))];
				f[i]=max(f[i],x);
			  }
	for(i=0;i<(1<<m);i++) g[i]=n+1;
	for(i=1;i<(1<<m);i++)
		for(j=0;j<m;j++)
			if((i>>j)&1){
				x=find(j+1,max(g[i^(1<<j)]-1,1));
				g[i]=min(g[i],x);
			  }
	T=(1<<m)-1,p=0,y=-100;
	for(i=0;i<=T;i++)
		G[g[T^i]].push_back(f[i]);
	for(i=1;i<=n;i++){
		x=find(0,i);
		while(p<=r[0][x]+1){
			for(j=0;j<G[p].size();j++)
				y=max(y,G[p][j]);
			p++;
		  }
		if(y<x-1) printf("Impossible\n");
		else printf("Possible\n");
	  }
	return 0;
}
