/*
Hanit Banga
*/

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <map>
#include <set>

using namespace std;

#define pb push_back
#define fast_cin() ios_base::sync_with_stdio(false)

typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

const int N = 2e5 + 10, M = log2(N) + 10;
const ll inf = 1e15;

ll x[N];
int v[N] = {0}, dp_lt[2 * N] = {0}, dp_rt[2 * N] = {0}, lt[N][M] = {0}, rt[N][M] = {0};

int main()
{
	int n, val;
	cin >> n >> val;
	x[0] = -inf;
	x[n + 1] = inf;
	for (int i = 1; i <= n; ++i)
		cin >> x[i];

	int temp = val, m = 0;
	for (int j = 0; temp > 0; ++j, temp /= 2, ++m)
		v[j] = temp;

	for (int i = 1; i <= n; ++i)
	{
		for (int j = 0; j <= m; ++j)
		{
			lt[i][j] = 1;
			if (x[i] - x[i - 1] <= v[j])
				lt[i][j] += lt[i - 1][j];
		}

		for (int j = 0; j <= m; ++j)
		{
			rt[n - i + 1][j] = 1;
			if (x[n - i + 2] - x[n - i + 1] <= v[j])
				rt[n - i + 1][j] += rt[n - i + 2][j];
		}
	}

	int subsets = (1 << m);
	for (int i = 1; i < subsets; ++i)
	{
		for (int j = 0; j < m; ++j)
		{
			if (i & (1 << j))
			{
				temp = dp_lt[i - (1 << j)];
				dp_lt[i] = max(dp_lt[i], temp + rt[temp + 1][j + 1]);
				
				temp = dp_rt[i - (1 << j)];
				dp_rt[i] = max(dp_rt[i], temp + lt[n - temp][j + 1]);
			}
		}
	}

	for (int i = 1; i <= n; ++i)
	{
		int l = lt[i][0], r = rt[i][0];
		l = i + 1 - l;
		r = r + i - 1;

		if (dp_lt[subsets - 1] >= l - 1 and dp_rt[subsets - 1] >= n - r)
			cout << "Possible\n";
		else
			cout << "Impossible\n";
	}
}