#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e5+5;
int n,m,a[N],l[25][N],r[25][N],v[25],cnt=0,L[1<<25],R[1<<25],ans[N];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	int V=m;
	while(V){V>>=1;v[cnt++]=V;}v[cnt]=m;
//	for(int i=1;i<=cnt;i++) printf("%d ",v[i]);
	for(int i=0;i<=cnt;i++)
	{
		l[i][1]=1;
		r[i][n]=n;
		for(int j=2;j<=n;j++) l[i][j]=(a[j]-a[j-1]<=v[i])?l[i][j-1]:j;
		for(int j=n-1;j>=1;j--) r[i][j]=(a[j+1]-a[j]<=v[i])?r[i][j+1]:j;
	}
	/*for(int i=0;i<=cnt;i++)
	{
		for(int j=1;j<=n;j++) printf("%d ",l[i][j]);
		printf("\n");
	}*/
//	L[0]=1,R[0]=n;
	for(int i=0;i<(1<<cnt);i++) R[i]=n+1;
	for(int i=0;i<(1<<cnt);i++)
		for(int j=0;j<=cnt;j++)
			if(((1<<j)&i)==0)
				L[(1<<j)|i]=max(L[(1<<j)|i],r[j][L[i]+1]),
				R[(1<<j)|i]=min(R[(1<<j)|i],l[j][R[i]-1]);
//	for(int i=0;i<(1<<cnt);i++) printf("%d %d\n",L[i],R[i]);
	/*for(int i=0;i<(1<<cnt);i++)
	{
		printf("!! %d %d\n",i,((1<<cnt)-1)^i);
		if(L[i]>=R[((1<<cnt)-1)^i]) s[R[((1<<cnt)-1)^i]]++,s[L[i]+1]--,printf("%d %d\n",R[((1<<cnt)-1)^i],L[i]);
	}
	int sum=0;
	for(int i=1;i<=n;i++) 
	{
		sum+=s[i];
		if(sum>0) puts("Possible");
		else puts("Impossible");
	}*/ 
	for(int i=1;i<=n;i++)
	{
		bool flag=0;
		for(int j=0;j<(1<<cnt);j++)
		{
			int ss=((1<<cnt)-1)^j;
			if(L[j]>=i-1&&R[ss]<=r[cnt][i]+1){flag=1;break;}
		}
		for(int j=i;j<=r[cnt][i];j++)
		{
			if(flag) ans[j]=1;
			else ans[j]=0;
		}
		i=r[cnt][i];
	}
	for(int i=1;i<=n;i++) puts(ans[i]==0?"Impossible":"Possible");
	return 0;
}