#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || '9' < ch) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') x = x * 10 + (ch ^ 48), ch = getchar();
  return x * f;
}
inline void chkmax(int &a, int b) {
  if (a < b) a = b;
}
inline void chkmin(int &a, int b) {
  if (a > b) a = b;
}
const int N = 2e5 + 9;
const int K = 21;
int n, m, v;
int x[N];
int vs[N], vtop;
int pre[K][N], suf[K][N];
int pr[N], su[N], mp[N];
int main() {
  if (fopen("vj.in", "r")) {
    freopen("vj.in", "r", stdin);
    freopen("vj.out", "w", stdout);
  }
  n = read();
  v = read();
  for (int i = 1; i <= n; i++) x[i] = read();
  for (int a = v >> 1; vs[vtop++] = a; a >>= 1)
    ;
  m = 1 << vtop;
  vs[vtop] = v;
  for (int k = 0; k <= vtop; k++) {
    pre[k][0] = 0, suf[k][n + 1] = n + 1;
    for (int i = 1, j = 1; i <= n; i = j + 1) {
      for (j = i; j + 1 <= n && x[j + 1] - x[j] <= vs[k]; j++)
        ;
      for (int l = i; l <= j; l++) pre[k][l] = i, suf[k][l] = j;
    }
  }
  for (int i = 0; i < m; i++) su[i] = n + 1;
  for (int i = 1; i < m; i++)
    for (int j = 0; j < vtop; j++)
      if (i & (1 << j)) {
        chkmin(su[i], pre[j][su[i ^ (1 << j)] - 1]);
        chkmax(pr[i], suf[j][pr[i ^ (1 << j)] + 1]);
      }
  for (int i = 0; i < m; i++) chkmax(mp[su[m - 1 - i] - 1], pr[i] + 1);
  for (int i = 0; i <= n; i++) chkmax(mp[i + 1], mp[i]);
  for (int i = 1; i <= n; i++) {
    if (mp[suf[vtop][i]] >= pre[vtop][i])
      puts("Possible");
    else
      puts("Impossible");
  }
  return 0;
}
