#include <bits/stdc++.h>
using namespace std;
int n, m, dn, pos[(100000 + 5)], dis[18], nxt[(100000 + 5)][18],
    beg[(100000 + 5)], endd[(100000 + 5)];
int f[1 << 18];
bool Solve(int l, int r) {
  if (l == 1 && r == n) return true;
  f[0] = 0;
  int tmp;
  for (int i = (1); i <= (int)((1 << dn) - 1); ++i) {
    f[i] = 0;
    for (int j = (1); j <= (int)(dn); ++j)
      if (i & (1 << (j - 1))) {
        tmp = f[i ^ (1 << (j - 1))] + 1;
        if (tmp >= l && tmp <= r) tmp = r + 1;
        f[i] = max(f[i], nxt[tmp][j]);
        if (f[i] + 1 >= l && f[i] + 1 <= r) f[i] = r;
      }
    if (f[i] >= n) return true;
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (1); i <= (int)(n); ++i) scanf("%d", &pos[i]);
  int st, ed, cnt = 0;
  for (int d = m; d >= 0; d >>= 1) {
    st = 1;
    if (d != m) dis[++dn] = d;
    while (st <= n) {
      ed = st;
      while (ed < n && pos[ed + 1] - pos[ed] <= d) ++ed;
      for (int i = (st); i <= (int)(ed); ++i) nxt[i][dn] = ed;
      if (d == m) {
        beg[++cnt] = st;
        endd[cnt] = ed;
      }
      st = ed + 1;
    }
    if (!d) break;
  }
  for (int i = (1); i <= (int)(dn); ++i) nxt[n + 1][i] = n + 1;
  if (cnt > dn + 1) {
    for (int i = (1); i <= (int)(n); ++i) puts("Impossible");
    return 0;
  }
  for (int si = (1); si <= (int)(cnt); ++si) {
    if (Solve(beg[si], endd[si])) {
      for (int i = (beg[si]); i <= (int)(endd[si]); ++i) puts("Possible");
    } else {
      for (int i = (beg[si]); i <= (int)(endd[si]); ++i) puts("Impossible");
    }
  }
  return 0;
}
