#include<bits/stdc++.h>
using namespace std;

const int maxn = 200010;

int x[maxn];
int l[maxn], r[maxn];
int lb[18][maxn], rb[18][maxn], dpl[1<<18], dpr[1<<18];
int bound[maxn];
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n,v;
	cin >> n >> v;
	for(int i=1;i<=n;i++)
		cin >> x[i];
	for(int i=0;i<=n;i++)
		bound[i] = 1e9;
	l[1] = 1;
	for(int i=2;i<=n;i++)
		if(x[i] - x[i-1] <= v)
			l[i] = l[i-1];
		else
			l[i] = i;
	r[n] = n;
	for(int i=n-1;i>=1;i--)
		if(x[i+1] - x[i] <= v)
			r[i] = r[i+1];
		else
			r[i] = i;
	vector<int> cap;
	{
		int z = v/2;
		while(z){
			cap.emplace_back(z);
			z/=2;
		}
		cap.emplace_back(0);
	}
	int N = cap.size();
	for(int i=0;i<N;i++){
		lb[i][0] = lb[i][1] = 1;
		for(int j=2;j<=n;j++)
			if(x[j] - x[j-1] <= cap[i])
				lb[i][j] = lb[i][j-1];
			else
				lb[i][j] = j;
		rb[i][n+1] = rb[i][n] = n;
		for(int j=n-1;j>=1;j--)
			if(x[j+1] - x[j] <= cap[i])
				rb[i][j] = rb[i][j+1];
			else
				rb[i][j] = j;
	}
	dpl[0] = 0;
	for(int i=0;i<(1<<N);i++)
		for(int j=0;j<N;j++)
			if(!((i>>j)&1))
				dpl[1<<j|i] = max(dpl[1<<j|i], rb[j][dpl[i]+1]);
	for(int i=0;i<(1<<N);i++)
		dpr[i] = n+1;
	for(int i=0;i<(1<<N);i++)
		for(int j=0;j<N;j++)
			if(!((i>>j)&1))
				dpr[1<<j|i] = min(dpr[1<<j|i], lb[j][dpr[i]-1]);
	for(int i=0;i<(1<<N);i++)
		bound[dpl[i]] = min(bound[dpl[i]], dpr[(1<<N) - 1 - i]);
	for(int i=n-1;i>=0;i--)
		bound[i] = min(bound[i], bound[i+1]);
	for(int i=1;i<=n;i++)
		if(bound[l[i] - 1] <= r[i] + 1)
			cout << "Possible\n";
		else
			cout << "Impossible\n";
}
