#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 200005
#define MM (1<<18)
#define ML 19
using namespace std;
inline int in(){
    int x=0;bool f=0; char c;
    for (;(c=getchar())<'0'||c>'9';f=c=='-');
    for (x=c-'0';(c=getchar())>='0'&&c<='9';x=(x<<3)+(x<<1)+c-'0');
    return f?-x:x;
}
int L[ML][MN],R[ML][MN],f[MM],g[MM],x[MN];
bool vis[MM];
int n,v,j,val;
int main()
{
	n=in();v=in();
	for (int i=1;i<=n;++i) x[i]=in();
	for (j=0,val=v;;val>>=1,++j){
		L[j][0]=L[j][1]=1;
		R[j][n]=R[j][n+1]=n;
		for (int i=2;i<=n;++i)
		if (x[i]-x[i-1]>val) L[j][i]=i;else L[j][i]=L[j][i-1];
		for (int i=n-1;i;--i)
		if (x[i+1]-x[i]>val) R[j][i]=i;else R[j][i]=R[j][i+1];
		if (!val) break;
	}for (int i=0;i<(1<<j);++i) f[i]=0,g[i]=n+1;
	for (int i=0;i<(1<<j);++i){
		for (int k=0;k<j;++k) if (!(i&(1<<k))){
			f[(i|(1<<k))]=max(f[i|(1<<k)],R[k+1][f[i]+1]);
			g[(i|(1<<k))]=min(g[i|(1<<k)],L[k+1][g[i]-1]);
		}
	}
	for (int i=0;i<(1<<j);++i)
	if (R[0][f[i]+1]>=g[((1<<j)-1)^i]-1) vis[R[0][f[i]+1]]=1;
	for (int i=1;i<=n;++i) puts(vis[R[0][i]]?"Possible":"Impossible");
	return 0;
}