#include <bits/stdc++.h>
#define mset(a,b) memset(a,b,sizeof a)
#define mcpy(a,b) memcpy(a,b,sizeof b)
#define lb(x) ((x)&(-(x)))
#define xx first
#define yy second
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define pii pair<int,int> 
#define inf 0x3f3f3f3f
#define N 262145
#define M 20
using namespace std;
typedef long long ll;
int n,m,V,a[N],l[N][M],r[N][M],f[N],g[N];
bool ans[N];
int main(){
	cin>>n>>V;
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int x=V;;x>>=1){
		for(int i=1;i<=n;i++)
			if(i==1||a[i]-a[i-1]>x)l[i][m]=i;
			else l[i][m]=l[i-1][m];
		for(int i=n;i;i--)
			if(i==n||a[i+1]-a[i]>x)r[i][m]=i;
			else r[i][m]=r[i+1][m];
		if(x)m++;
		else break;
	}
	for(int i=0;i<(1<<m);i++)for(int j=0;j<m;j++)if(!(i>>j&1))
		f[i|(1<<j)]=max(f[i|(1<<j)],f[i]==n?n:r[f[i]+1][j+1]);
	for(int i=0;i<(1<<m);i++)g[i]=inf;
	g[0]=n+1;
	for(int i=0;i<(1<<m);i++)for(int j=0;j<m;j++)if(!(i>>j&1))
		g[i|(1<<j)]=min(g[i|(1<<j)],g[i]==1?1:l[g[i]-1][j+1]);
//	cout<<g[1]<<endl;
	for(int i=0;i<(1<<m);i++){
		int L=f[i],R=g[i^(1<<m)-1];
//		cout<<L<<" "<<R<<endl;
		if(L+1>=R){
			for(int j=1;j<=n;j++)ans[j]=1;
			break;
		}
//		cout<<L+1<<" "<<r[L+1][0]+1<<" "<<R<<endl;
		if(r[L+1][0]+1>=R&&!ans[L+1]){
//			cout<<l[0][L]<<" "<<r[0][L]<<endl;
			for(int j=l[L+1][0];j<=r[L+1][0];j++)ans[j]=1;
		}
	}
	for(int i=1;i<=n;i++)puts(ans[i]?"Possible":"Impossible");
	return 0;
}