#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N],cnt,n,v,b[N],f[1<<18];
int c[19][N];
bool ans[N];
inline void Max(int &x,int y){if(y>x)x=y;}
int main(){
	scanf("%d%d",&n,&v);
	for(int i =1;i<=n;i++)scanf("%d",a+i);
	sort(a+1,a+n+1);
	int last = 1,tot = 0;
	for(int i = 2;i<=n;i++){
		if(a[i]>a[i-1]+v) {
			for(int j = last;j<i;j++) c[0][j] =i-1;
			last = i;
			tot++;
		}
	} 
	tot++;
	for(int j=last;j<=n;j++) c[0][j]=  n;
	if(tot>18){
		for(int i =1;i<=n;i++) puts("Impossible");
		return 0;
	}
	
	for(int st=1,fi;st<=n;st=fi+1){
		fi = c[0][st];
		int tmp = v;
		cnt = 0;
		int m = 0;
		bool pd = false;
	
		for(int i =1;i<st;i++) b[++m] = a[i];
		for(int i =fi+1;i<=n;i++) b[++m] = a[i];
		do{
			cnt++;
			tmp>>=1;
			int last = 1;
			for(int i = 2;i<=m;i++){
				if(b[i]>b[i-1]+tmp) {
					for(int j = last;j<i;j++) c[cnt][j] =i-1;
					last = i;
				}
			} 
			for(int j=last;j<=m;j++) c[cnt][j]=  m;
		} while(tmp>0);
		//cout<<start<<' '<<*it<<endl;
		memset(f,0,sizeof(f));
		for(int k = 0;k<1<<cnt;k++){
			if(f[k] == m) {
				pd =true;
				continue;
			}
			for(int j = 1;j<=cnt;j++) if(!(k>>j-1&1)){
				Max(f[k+(1<<j-1)],c[j][f[k]+1]);
			}
		}
		for(int i =st;i<=fi;i++) ans[i] = pd;
	}
	for(int i=1;i<=n;i++) 
		if(ans[i]) puts("Possible");
		else puts("Impossible");
	return 0;
}