#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
typedef long long ll ;
#define rep(i, a, b) for (int i = a ; i <= b; ++ i) 
const int M = 18, N = 3e5 + 5 ;
using namespace std ;

int n, v[M + 5], x[N], L[M + 1][N], R[M + 1][N], dpl[N], dpr[N], bit[N], m ;

int main() {
	scanf("%d%d", &n, &v[0]) ;
	rep(i, 1, n) scanf("%d", &x[i]) ;
	for (m = 1; ; m ++) {
		v[m] = v[m - 1] / 2 ;
		if (!v[m]) break ;
	}
	rep(j, 0, m) {
		L[j][1] = L[j][0] = 1 ;
		rep(i, 2, n) L[j][i] = (x[i] - x[i - 1] <= v[j] ? L[j][i - 1] : i) ;
		R[j][n] = R[j][n + 1] = n ;
		for (int i = n - 1; i; -- i) R[j][i] = (x[i + 1] - x[i] <= v[j] ? R[j][i + 1] : i) ;
	}
	int st = (1 << m) - 1 ;
	dpl[0] = 0, dpr[0] = n + 1 ;
	rep(i, 1, st) {
		dpl[i] = 0, dpr[i] = n + 1 ;
		rep(j, 1, m) if ((i >> (j - 1)) & 1) {
			dpl[i] = max(dpl[i], R[j][dpl[i ^ (1 << (j - 1))] + 1]) ;
			dpr[i] = min(dpr[i], L[j][dpr[i ^ (1 << (j - 1))] - 1]) ;
		}
	}
	rep(i, 0, n + 1) bit[i] = - n ;
	rep(i, 0, st) bit[dpr[i]] = max(bit[dpr[i]], dpl[st ^ i]) ;
	rep(i, 1, n + 1) bit[i] = max(bit[i], bit[i - 1]) ;
	rep(i, 1, n) puts((bit[R[0][i] + 1] >= L[0][i] - 1) ? "Possible" : "Impossible") ;
	return 0 ; 
}