#include<bits/stdc++.h>
using namespace std;
const int N=200005,M=20;
int cnt,ans[N],n,m,x[N],a[M],tot,le[M][N],ri[M][N],dp1[1<<M],dp2[1<<M];
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++)scanf("%d",&x[i]);
	while (m){
		a[++tot]=m;
		m/=2;
	}
	reverse(a+1,a+tot+1);
	for (int i=0;i<=tot;i++)
		for (int j=1;j<=n;j++)
			if (j==1||x[j]-x[j-1]>a[i])le[i][j]=j;
			else le[i][j]=le[i][j-1];
	for (int i=0;i<=tot;i++)
		for (int j=n;j;j--)
			if (j==n||x[j+1]-x[j]>a[i])ri[i][j]=j;
			else ri[i][j]=ri[i][j+1];
	for (int i=1;i<1<<tot;i++)
		for (int j=0;j<tot;j++)
			if (i&(1<<j)){
				int t=dp1[i^(1<<j)];
				if (t==n)dp1[i]=n;
				else dp1[i]=max(dp1[i],ri[j][t+1]);
			}
	for (int i=0;i<1<<tot;i++)dp2[i]=n+1;
	for (int i=1;i<1<<tot;i++)
		for (int j=0;j<tot;j++)
			if (i&(1<<j)){
				int t=dp2[i^(1<<j)];
				if (t==1)dp2[i]=1;
				else dp2[i]=min(dp2[i],le[j][t-1]);
			}
	for (int i=1;i<=n;i++)
		if (ans[le[tot][i]]){
			if (ans[le[tot][i]]==1)puts("Possible");
			else puts("Impossible");
		}
		else {
			cnt++;
			if (cnt>20){
				puts("Impossible");
				continue;
			}
			ans[le[tot][i]]=2;
			for (int j=0;j<1<<tot;j++)
				if (dp1[j]>=le[tot][i]-1&&dp2[((1<<tot)-1)^j]<=ri[tot][i]+1)ans[le[tot][i]]=1;
			if (ans[le[tot][i]]==1)puts("Possible");
			else puts("Impossible");
		}
}
