#include <bits/stdc++.h>
using namespace std;
const int Nmax = 2e5 + 5;
int n, k, V, i, a[Nmax], lg[Nmax], dp1[Nmax], go1[22][Nmax], dp2[Nmax],
    go2[22][Nmax], nr[Nmax];
void compute() {
  int l, i, j, ind;
  for (l = 0; l < k; ++l) {
    for (i = 1; i <= n; ++i) {
      for (j = i; j + 1 <= n && a[j + 1] - a[j] <= lg[l]; ++j)
        ;
      for (ind = i; ind <= j; ++ind) go1[l][ind] = j;
      i = j;
    }
    for (i = n; i; --i) {
      for (j = i; j - 1 >= 1 && a[j] - a[j - 1] <= lg[l]; --j)
        ;
      for (ind = i; ind >= j; --ind) go2[l][ind] = j;
      i = j;
    }
  }
}
void dinamique() {
  int i, j;
  dp1[0] = 0, dp2[0] = n + 1;
  for (i = 1; i < (1 << k); ++i) {
    dp1[i] = 1;
    dp2[i] = n;
    for (j = 0; j < k; ++j)
      if (i & (1 << j)) {
        dp1[i] = max(dp1[i], go1[j][dp1[i ^ (1 << j)] + 1]);
        dp2[i] = min(dp2[i], go2[j][dp2[i ^ (1 << j)] - 1]);
      }
  }
}
void solve() {
  int i, j, ind, mask = (1 << k) - 2;
  bool ok;
  for (i = 0; i <= n + 1; ++i) nr[i] = -1;
  for (i = 0; i <= mask; ++i) nr[dp2[i]] = max(nr[dp2[i]], dp1[mask ^ i]);
  for (i = 1; i <= n + 1; ++i) nr[i] = max(nr[i], nr[i - 1]);
  for (i = 1; i <= n; ++i) {
    for (j = i; j + 1 <= n && a[j + 1] - a[j] <= V; ++j)
      ;
    ok = (nr[j + 1] >= i - 1);
    for (ind = i; ind <= j; ++ind)
      printf("%s\n", ok ? "Possible" : "Impossible");
    i = j;
  }
}
int main() {
  scanf("%d%d", &n, &V);
  for (i = 1; i <= n; ++i) scanf("%d", &a[i]);
  lg[0] = V / 2;
  for (i = 1; lg[i - 1]; ++i) lg[i] = lg[i - 1] / 2;
  k = i;
  compute();
  dinamique();
  solve();
  return 0;
}
