#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mid (l+r>>1)
typedef long long ll;
template<typename T>inline T read(){
	T x=0,f=1;char c=getchar();
	for(;c<'0'||c>'9';f=c=='-'?-1:1,c=getchar());
	for(;c>='0'&&c<='9';x=(x<<3)+(x<<1)+c-'0',c=getchar());
	return x*f;
}
const int maxs=1<<19,maxn=2e5+5;
int n,v,lg,s,lt[maxs],rt[maxs],a[20][maxn],cnt[20];
ll x[maxn];
int S(int opt,int k,int x){
	int l=1,r=cnt[k];
	while(r-l>1)
		if(a[k][mid]<x||(opt&&a[k][mid]==x))l=mid+opt;
		else r=mid-1+opt;
	int r1=opt?l:r,r2=opt?r:l,f=opt?1:-1;
	if(a[k][r1]*f>x*f)return a[k][r1]+1-opt;
	return a[k][r2]+1-opt;
}
int main(){
	n=read<int>();v=read<int>();
	lg=ceil(log2(v))+1+(ceil(log2(v))==log2(v));s=(1<<lg)-1;
	for(int i=1;i<=n;i++)x[i]=read<ll>(),x[i-1]=x[i]-x[i-1];x[n]=0;
	for(int i=1;i<=lg;i++){
		cnt[i]=1;
		for(int j=1;j<=n;j++)
			a[i][cnt[i]]=j,cnt[i]+=(x[j]>v>>(i-1));
	}
	if(cnt[1]>lg){for(int i=0;i<n;i++)puts("Impossible");return 0;}
	memset(rt,0,sizeof(rt));
	for(int i=0;i<=s;i++)lt[i]=n+1;
	for(int i=0;i<=s;i+=2)
		for(int j=2;j<=lg;j++){
			int s0=1<<j-1;
			if(i&s0)continue;
			rt[i|s0]=std::max(rt[i|s0],S(1,j,rt[i]));
			lt[i|s0]=std::min(lt[i|s0],S(0,j,lt[i]-1));
		}
	for(int i=1;i<=cnt[1];i++){
		int f=0,b=a[1][i-1]+1,e=a[1][i];
		if(i==1)b=1;
		for(int s0=0;s0<=s&&(!f);s0+=2)f=(b<=rt[s0]+1&&e>=lt[s-s0-1]-1);
		for(int j=b;j<=e;j++)puts(f?"Possible":"Impossible");
	}
    return 0;
}