#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 10;
const int MOD = 1000000007;
const int LOG = 18;
const int INF = 1000000010;
const int delta = 11353;
int n, a[N], dp[(1 << LOG) + 10], R[N][LOG], L[N][LOG], V[LOG],
    DP[(1 << LOG) + 10], ps[N];
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> V[LOG - 1];
  for (int i = LOG - 2; i >= 0; i--) V[i] = V[i + 1] / 2;
  for (int i = 1; i <= n; i++) cin >> a[i];
  a[0] = -INF * 2, a[n + 1] = INF * 2;
  for (int i = 0; i < LOG; i++) R[n + 1][i] = n + 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < LOG; j++) {
      if (abs(a[i] - a[i - 1]) <= V[j])
        L[i][j] = L[i - 1][j];
      else
        L[i][j] = i;
    }
  }
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j < LOG; j++) {
      if (abs(a[i] - a[i + 1]) <= V[j])
        R[i][j] = R[i + 1][j];
      else
        R[i][j] = i;
    }
  }
  dp[0] = 0;
  for (int mask = 1; mask < (1 << LOG); mask++) {
    for (int j = 0; j < LOG; j++) {
      if (j != LOG - 1 && V[j + 1] == 0) continue;
      if (mask & (1 << j))
        dp[mask] = max(dp[mask], R[dp[mask ^ (1 << j)] + 1][j]);
    }
  }
  DP[0] = n + 1;
  for (int mask = 1; mask < (1 << LOG); mask++) {
    DP[mask] = n + 1;
    for (int j = 0; j < LOG; j++) {
      if (j != LOG - 1 && V[j + 1] == 0) continue;
      if (mask & (1 << j))
        DP[mask] = min(DP[mask], L[DP[mask ^ (1 << j)] - 1][j]);
    }
  }
  for (int mask = 0; mask < (1 << (LOG - 1)); mask++) {
    int mask2 = ((1 << (LOG - 1)) - 1) ^ mask;
    if (dp[mask] >= DP[mask2] - 1) {
      ps[1]++;
    } else {
      if (R[dp[mask] + 1][LOG - 1] >= DP[mask2] - 1) {
        ps[L[dp[mask] + 1][LOG - 1]]++;
        ps[R[dp[mask] + 1][LOG - 1] + 1]--;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    ps[i] += ps[i - 1];
    cout << (ps[i] > 0 ? "Possible\n" : "Impossible\n");
  }
  return 0;
}
