#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline void chmin(A &a, B b) {
  if (a > b) a = b;
}
template <typename A, typename B>
inline void chmax(A &a, B b) {
  if (a < b) a = b;
}
long long L[20][222222], R[20][222222];
long long N, V;
long long X[222222];
long long dp1[1 << 17];
long long dp2[1 << 17];
long long acc[222222];
signed main() {
  cin >> N >> V;
  for (long long i = 0; i < (N); i++) cin >> X[i];
  for (long long k = 0; k < (18); k++) {
    for (long long i = 0; i < (N); i++) {
      L[k][i] = i;
      if (i && X[i] - X[i - 1] <= (V >> k)) L[k][i] = L[k][i - 1];
    }
    for (long long i = N - 1; i >= 0; i--) {
      R[k][i] = i;
      if (i + 1 != N && X[i + 1] - X[i] <= (V >> k)) R[k][i] = R[k][i + 1];
    }
  }
  for (long long i = 0; i < (1 << 17); i++) {
    for (long long j = 0; j < (17); j++) {
      if (i >> j & 1) continue;
      if ((V >> j) == 0)
        chmax(dp1[i | (1 << j)], dp1[i]);
      else if (dp1[i] == N)
        dp1[i | (1 << j)] = N;
      else
        chmax(dp1[i | (1 << j)], R[j + 1][dp1[i]] + 1);
    }
  }
  for (long long i = 0; i < (1 << 17); i++) dp2[i] = N - 1;
  for (long long i = 0; i < (1 << 17); i++) {
    for (long long j = 0; j < (17); j++) {
      if (i >> j & 1) continue;
      if ((V >> j) == 0)
        chmin(dp2[i | (1 << j)], dp2[i]);
      else if (dp2[i] == -1)
        dp2[i | (1 << j)] = -1;
      else
        chmin(dp2[i | (1 << j)], L[j + 1][dp2[i]] - 1);
    }
  }
  for (long long i = 0; i < (1 << 17); i++) {
    long long j = (1 << 17) - 1 - i;
    if (dp1[i] > dp2[j]) {
      acc[0]++;
      continue;
    }
    if (R[0][dp1[i]] >= dp2[j]) {
      acc[L[0][dp1[i]]]++;
      acc[R[0][dp1[i]] + 1]--;
    }
  }
  for (long long i = 0; i < (N); i++) {
    acc[i + 1] += acc[i];
    if (acc[i]) {
      puts("Possible");
    } else {
      puts("Impossible");
    }
  }
  return 0;
}
