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

typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define ALL(c) (c).begin(),(c).end()

const int MN = 200010;
const int ML = 19;

int N, V;
int v[ML];
int x[MN];
int tor[2][ML][MN];
int dp[2][1 << ML];
int imos[MN];

int main() {
	cin >> N >> V;

	int L = 0;
	v[L++] = V;

	while (V > 0) {
		V /= 2;
		v[L++] = V;
	}

	rep(i, N) cin >> x[i];

	rep(tt, 2) {
		rep(j, L) {
			tor[tt][j][N] = N;
			tor[tt][j][N-1] = N-1;
		}

		for (int i = N-2; i >= 0; --i) {
			rep(j, L) {
				if (x[i+1] - x[i] <= v[j]) {
					tor[tt][j][i] = tor[tt][j][i+1];
				} else {
					tor[tt][j][i] = i;
				}
			}
		}

		dp[tt][0] = 0;
		rep(i, 1 << L) {
			rep(j, L) {
				if (!((i >> j) & 1)) {
					dp[tt][i | (1 << j)] = max(dp[tt][i | (1 << j)], tor[tt][j][dp[tt][i]] + 1);
				}
			}
		}

		reverse(x, x + N);
		rep(i, N) x[i] *= -1;
	}

	int B = (1 << L) - 2;

	rep(i, 1 << L) {
		if (i & 1) continue;
		int j = B ^ i;
		int l = dp[0][i], r = N - dp[1][j];

		if (l >= r) {
			imos[0]++;
			imos[N]--;
		} else {
			if (tor[0][0][l] + 1 >= r) {
				int p = tor[0][0][l];
				int u = N-1-tor[1][0][N-1-p];
				imos[u]++;
				imos[p+1]--;
			}
		}
	}

	rep(i, MN-1) {
		imos[i+1] += imos[i];
	}

	rep(i, N) {
		puts(imos[i] > 0 ? "Possible" : "Impossible");
	}
	
	return 0;
}