#include <bits/stdc++.h>
using namespace std;
void gi(int &ret) {
  ret = 0;
  char inp = getchar();
  int kl = 1;
  while (inp < '0' || inp > '9') {
    if (inp == '-') kl = -1;
    inp = getchar();
  }
  while ('0' <= inp && inp <= '9')
    ret = (ret << 3) + (ret << 1) + (int)(inp - '0'), inp = getchar();
  if (kl < 1) ret = -ret;
}
const int MAXN = 2e5 + 5;
const int MAXLOGN = 18;
const int MAXBIT = (1 << 18);
int n, v, x[MAXN], nx[MAXLOGN][MAXN], dst[MAXBIT], skip, aft, no = 0;
bool bfs() {
  queue<int> q;
  q.push(1);
  memset(dst, -1, sizeof(dst));
  dst[1] = 1;
  while (!q.empty()) {
    int bit = q.front(), now = dst[bit];
    q.pop();
    if (now == skip) now = aft;
    if (now > n) return 1;
    for (int i = 0; i <= no; i++)
      if (!(bit & (1 << i))) {
        int nexbit = bit | (1 << i);
        if (dst[nexbit] < 0) q.push(nexbit);
        dst[nexbit] = max(dst[nexbit], nx[i][now]);
      }
  }
  return 0;
}
int main() {
  gi(n);
  gi(v);
  for (int i = 1; i <= n; i++) gi(x[i]);
  vector<int> sg;
  while (v) {
    int aw = 1, lst = 1;
    while (lst <= n) {
      if (!no) sg.push_back(lst);
      while (aw < n && (x[aw + 1] - x[aw]) <= v) aw++;
      aw++;
      while (lst < aw) nx[no][lst++] = aw;
    }
    no++;
    v >>= 1;
  }
  for (int i = 1; i <= n; i++) nx[no][i] = i + 1;
  if (sg.size() > MAXLOGN) {
    for (int i = 1; i <= n; i++) printf("Impossible\n");
    return 0;
  }
  for (auto aw : sg) {
    skip = aw;
    aft = nx[0][aw];
    if (bfs()) {
      while (aw++ < aft) printf("Possible\n");
    } else {
      while (aw++ < aft) printf("Impossible\n");
    }
  }
  return 0;
}
