// '
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
typedef unsigned short sint;
typedef long long ll;
typedef long double ld;
typedef complex<ld> pt;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
const ld TAU=2*acos(-1);
const ld eps=1e-8;
const int inf=1e9+99;
const ll linf=1e18+99;

int n,v;
int vv[20],m;
int x[200<<10];
int ps[20][200<<10]; // TODO
int jj[20][200<<10]; // TODO
bool flag[200<<10];

map<pair<int,int>,bool> dp[1<<18];
bool go(int L,int R,int mk) {
	if(L==R) return 1;
	if(!mk) return 0;
	if(dp[mk].count({L,R})) return dp[mk][{L,R}];
	bool &ans=dp[mk][{L,R}];
	ans=0;
	int e=0;
	for(;(1<<e)<=mk;) ++e;
	--e;
	int pc=__builtin_popcount(mk);
	if(ps[e][R-1]-(L?ps[e][L-1]:0) > pc) return ans=0;

	mk&=~(1<<e);
	for(int M=L;M!=R;M=jj[e][M]) {
		for(int nk=0;nk<=mk;nk++) {
			if((mk&nk)!=nk) continue;
			if(go(L,M,nk) && go(jj[e][M],R,mk&~nk)) {
				ans=1;
				if(L || R<n) return 1;
				else {
					for(int i=L;i<R;i++) flag[i]=1;
				}
			}
		}
	}

	return ans;
}

void genjj() {
	for(int e=0;e<m;e++) {
		for(int i=n;--i>=0;) {
			if(x[i+1]-x[i] <= vv[e]) jj[e][i]=jj[e][i+1];
			else jj[e][i]=i+1;
		}
		vector<int> v;
		for(int i=0;i<n;i=jj[e][i]) {
			v.pb(i);
		}
		for(int x:v) ps[e][x]=1;
		partial_sum(ps[e],ps[e]+n,ps[e]);
	}
}


int32_t main() {
	scanf("%d%d",&n,&v);
	for(int i=0;i<n;i++) scanf("%d",x+i);
	x[n]=inf+inf;
	{
		m=v;
		vector<int> vd;
		for(;m;) vd.pb(m), m>>=1;
		reverse(vd.begin(),vd.end());
		m=(int)vd.size();
		for(int i=0;i<m;i++) vv[i]=vd[i];
	}
	genjj();
	for(int i=0;i<m;i++) cerr<<vv[i]<<endl;
	go(0,n,(1<<m)-1);
	for(int i=0;i<n;i++) printf(flag[i]?"P":"Imp"), printf("ossible\n");
}






