#include <bits/stdc++.h>
using namespace std;
int n, v;
int a[220000];
int nxt[20][220000];
vector<int> calc(vector<int> &a, int v) {
  int jump = 0;
  for (;; jump++) {
    int last = 0;
    for (int j = 0; j < n; j++) {
      if (j == n - 1 || abs(a[j + 1] - a[j]) > v) {
        for (int k = last; k <= j; k++) nxt[jump][k] = j + 1;
        last = j + 1;
      }
    }
    if (v == 0) break;
    v /= 2;
  }
  jump++;
  vector<int> dp(1 << jump, 0);
  for (int i = 0; i < (1 << jump); i++) {
    for (int j = 0; j < jump; j++) {
      if ((1 << j) & i) continue;
      dp[(1 << j) | i] = max(dp[(1 << j) | i], nxt[j][dp[i]]);
    }
  }
  return dp;
}
long long ok[1 << 20];
int main() {
  cin >> n >> v;
  vector<int> a(n);
  for (auto &x : a) cin >> x;
  reverse(a.begin(), a.end());
  auto rev_dp = calc(a, v);
  reverse(a.begin(), a.end());
  auto dp = calc(a, v);
  int not_zero = dp.size() - 2;
  for (int l = 0; l <= not_zero; l += 2) {
    int r = not_zero - l;
    if (nxt[0][dp[l]] + rev_dp[r] >= n) {
      ok[dp[l]]++;
      ok[nxt[0][dp[l]]]--;
    }
  }
  for (int i = 1; i < n; i++) ok[i] += ok[i - 1];
  for (int i = 0; i < n; i++) {
    if (ok[i])
      cout << "Possible" << endl;
    else
      cout << "Impossible" << endl;
  }
  return 0;
}
