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

inline int read()
{
	int x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
	return x*f;
}
int n,v,p[N],lgl[N][20],lgr[N][20];
int Fl[N],Fr[N],sc,XD[N];
int main()
{
	n=read(); v=read(); 
	for(int i=1;i<=n;i++)
		p[i]=read();
	for(int t=v,_=0;t;t>>=1,_++)
	{
		for(int i=1;i<=n;i++)
		{
			int j=i;
			while(p[j+1]-p[j]<=t&&j+1<=n) j++;
			for(int x=i;x<=j;x++)
				lgl[x][_]=j,lgr[x][_]=i;
			i=j;
		} sc=max(sc,_);
	} sc++;
	for(int i=1;i<=n;i++) lgl[i][sc]=lgr[i][sc]=i;
	memset(XD,0x3f,sizeof XD);
	memset(Fr,0x3f,sizeof Fr); Fr[0]=n+1;
	for(int i=0;i<(1<<sc);i++) 
	{
		for(int k=1;k<=sc;k++) if(!(i&(1<<(k-1))))
		{
			Fl[i|(1<<(k-1))]=max(Fl[i|(1<<(k-1))],lgl[Fl[i]+1][k]);
			Fr[i|(1<<(k-1))]=min(Fr[i|(1<<(k-1))],lgr[Fr[i]-1][k]);
		}
	}
	for(int i=0;i<(1<<sc);i++) XD[Fl[i]]=min(XD[Fl[i]],Fr[((1<<sc)-1)^i]);
	for(int i=n;i>=1;i--) XD[i]=min(XD[i],XD[i+1]);
	for(int i=1;i<=n;i++)
	{
		if(lgl[i][0]==n&&lgr[i][0]==1) puts("Possible");
		else 
		{
			if(XD[lgr[i][0]-1]<=lgl[i][0]+1) puts("Possible");
			else puts("Impossible");
		}
	}
	return 0;
}