#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;
int n, ans[200050];
vector<int> v;
int a[200050];
int go[19][200050];
int dp[1 << 19];
bool f(int l, int r, int k)
{
	vector<int> b;
	for (int i = 0; i < n; i++)
		if (i < l || i >= r)
			b.emplace_back(a[i]);
	int m = b.size();
	for (int i = 0; i < k; i++)
		for (int j = m - 1; j >= 0; j--) {
			go[i][j] = j + 1;
			if (j + 1 < m&&b[j + 1] - b[j] <= v[i])
				go[i][j] = go[i][j + 1];
		}
	for (int i = 0; i < 1 << k; i++)dp[i] = 0;
	for (int i = 0; i < 1 << k; i++) {
		if (dp[i] == m)	return 1;
		for (int j = 0; j < k; j++)
			if ((i >> j & 1) == 0)dp[i | 1 << j] = max(dp[i | 1 << j], go[j][dp[i]]);
	}
	return false;
}
int main()
{
	int V;
	cin >> n >> V;
	for (; V > 0; V /= 2)
		v.emplace_back(V);
	v.emplace_back(0);
	reverse(v.begin(), v.end());
	for (int i = 0; i < n; i++)
		cin >> a[i];
	a[n] = 1100000000;
	if (f(n, n, v.size())) {
		for (int l = 0; l < n;) {
			int r = l + 1;
			while (a[r] - a[r - 1] <= v.back())r++;
			if (f(l, r, v.size() - 1))
				for (int i = l; i < r; i++)ans[i] = 1;
			l = r;
		}
	}
	for (int i = 0; i < n; i++)
		cout << (ans[i] ? "Possible" : "Impossible") << endl;
}