#include <bits/stdc++.h>
const int MAXN = 524289;
int n, V, xs[MAXN];
int ls[MAXN], rs[MAXN], bak;
int L[32][MAXN], R[32][MAXN];
int pre[MAXN], suc[MAXN];
void getmax(int& x, int y) { x < y ? x = y : 0; }
void getmin(int& x, int y) { x > y ? x = y : 0; }
int main() {
  std::ios_base::sync_with_stdio(false), std::cin.tie(0);
  std::cin >> n >> V;
  xs[n + 1] = std::numeric_limits<int>::max();
  for (int i = 1; i <= n; ++i) std::cin >> xs[i];
  int T = 0;
  for (;; ++T, V >>= 1) {
    int lst = 1;
    for (int i = 2; i <= n + 1; ++i)
      if (xs[i] - xs[i - 1] > V) {
        int l = lst, r = i - 1;
        if (!T)
          ls[++bak] = l, rs[bak] = r;
        else
          for (int j = l; j <= r; ++j) L[T - 1][j] = l, R[T - 1][j] = r;
        lst = i;
      }
    if (!V) break;
  }
  const int U = 1 << T;
  for (int i = 0; i != U; ++i) suc[i] = n + 1;
  for (int i = 0; i != U; ++i)
    for (int j = 0; j != T; ++j)
      if (~i >> j & 1) {
        getmax(pre[i | 1 << j], R[j][pre[i] + 1]);
        getmin(suc[i | 1 << j], L[j][suc[i] - 1]);
      }
  for (int i = 1; i <= bak; ++i) {
    bool can = false;
    if (bak <= 40) {
      for (int j = 0; j != U; ++j)
        if (pre[j] >= ls[i] - 1 && suc[U - j - 1] <= rs[i] + 1) {
          can = true;
          break;
        }
    }
    for (int j = ls[i]; j <= rs[i]; ++j)
      std::cout << (can ? "Possible\n" : "Impossible\n");
  }
  return 0;
}
