#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int N = 2e5 + 10;
const int L = 20;
int n, v, x[N], fwd[L][N], bak[L][N];
int pref[1 << L], suf[1 << L];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> v;
  x[0] = -INF;
  x[n + 1] = INF;
  for (int i = 1; i <= n; i++) cin >> x[i];
  int l = 0;
  while (true) {
    fwd[l][n + 1] = n + 1;
    for (int i = n; i >= 1; i--)
      fwd[l][i] = x[i + 1] - x[i] <= v ? fwd[l][i + 1] : i + 1;
    bak[l][0] = 0;
    for (int i = 1; i <= n; i++)
      bak[l][i] = x[i] - x[i - 1] <= v ? bak[l][i - 1] : i - 1;
    l++;
    if (v == 0) break;
    v /= 2;
  }
  vector<pair<int, int> > seg;
  for (int i = 1; i <= n; i = fwd[0][i]) {
    int j = fwd[0][i];
    seg.emplace_back(i, j);
  }
  if (((int)(seg).size()) >= l + 2) {
    for (int i = 0; i < (int)(n); i++) cout << "Impossible\n";
    return 0;
  }
  for (int mask = 0; mask < (1 << l); mask++) {
    pref[mask] = 1;
    suf[mask] = n;
    for (int i = 0; i < (int)(l); i++)
      if ((mask >> i) & 1) {
        pref[mask] = max(pref[mask], fwd[i][pref[mask - (1 << i)]]);
        suf[mask] = min(suf[mask], bak[i][suf[mask - (1 << i)]]);
      }
  }
  auto ALL = (1 << l) - 2;
  for (auto lr : seg) {
    int l, r;
    tie(l, r) = lr;
    bool can_do = false;
    for (int mask = 0; mask < (1 << l); mask += 2) {
      int other = ALL - mask;
      if (l <= pref[mask] && suf[other] < r) {
        can_do = true;
        break;
      }
    }
    for (int _ = 0; _ < (int)(r - l); _++)
      cout << (can_do ? "Possible\n" : "Impossible\n");
  }
  return 0;
}
