#include <bits/stdc++.h>
using namespace std;
const int maxn = 200200, lg = 19;
int vi[lg], seg[lg][maxn], tol[lg][maxn], tor[lg][maxn], sl[lg][maxn],
    sr[lg][maxn], a[maxn];
int n, v, stk;
map<pair<int, int>, bool> cal, car;
bool can_left(int p, int msk) {
  if (p == 0) return true;
  if (msk == 0) return false;
  int up = 0;
  int pco = __builtin_popcount(msk);
  while (((msk >> up) & 1) == 0) up++;
  if (sl[up][p] > pco) return false;
  auto it = cal.find(make_pair(p, msk));
  if (it != cal.end()) return it->second;
  for (int j = 1; j < stk; j++) {
    if ((msk >> j) & 1) {
      if (can_left(tol[j][p] - 1, msk ^ (1 << j))) {
        return cal[{p, msk}] = true;
      }
    }
  }
  return cal[{p, msk}] = false;
}
bool can_right(int p, int msk) {
  if (p == n + 1) return true;
  if (msk == 0) return false;
  int up = 0;
  int pco = __builtin_popcount(msk);
  while (((msk >> up) & 1) == 0) up++;
  if (sr[up][p] > pco) return false;
  auto it = car.find(make_pair(p, msk));
  if (it != car.end()) return it->second;
  for (int j = 1; j < stk; j++) {
    if ((msk >> j) & 1) {
      if (can_right(tor[j][p] + 1, msk ^ (1 << j))) {
        return car[{p, msk}] = true;
      }
    }
  }
  return car[{p, msk}] = false;
}
int main() {
  cin >> n >> v;
  while (v) {
    vi[stk++] = v;
    v /= 2;
  }
  vi[stk++] = 0;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int j = 0; j < stk; j++) {
    for (int i = 1; i <= n; i++) {
      if (i == 1 || a[i] - a[i - 1] > vi[j])
        tol[j][i] = i, sl[j][i] = sl[j][i - 1] + 1;
      else
        tol[j][i] = tol[j][i - 1], sl[j][i] = sl[j][i - 1];
    }
    for (int i = n; i >= 1; i--) {
      if (i == n || a[i + 1] - a[i] > vi[j])
        tor[j][i] = i, sr[j][i] = sr[j][i + 1] + 1;
      else
        tor[j][i] = tor[j][i + 1], sr[j][i] = sr[j][i + 1];
    }
  }
  if (sr[0][n] > lg) {
    for (int i = 0; i < n; i++) {
      cout << "Impossible\n";
    }
    return 0;
  }
  for (int i = 1, j = 1; i <= n; i = j) {
    while (j + 1 <= n && a[j + 1] - a[j] <= vi[0]) j++;
    bool possible = false;
    for (int c = 0; c < (1 << stk); c += 2) {
      int ac = ((1 << stk) - 1) ^ c ^ 1;
      if (can_left(i - 1, c) && can_right(j + 1, ac)) {
        possible = true;
        break;
      }
    }
    for (int k = i; k <= j; k++) {
      if (possible)
        cout << "Possible\n";
      else
        cout << "Impossible\n";
    }
    j++;
  }
  return 0;
}
