#include <bits/stdc++.h>

using namespace std;

int main() {
   ios_base::sync_with_stdio(false); cin.tie(nullptr);
   int N, V;
   cin >> N >> V;
   vector<int> X(N);
   for (int i = 0; i < N; ++i) cin >> X[i];
   vector<int> vs = {V};
   while (vs.back()) vs.emplace_back(vs.back() / 2);
   reverse(vs.begin(), vs.end());
   int sz = int(vs.size()) - 1;
   vector<vector<int>> L(sz + 1, vector<int>(N));
   vector<vector<int>> R(sz + 1, vector<int>(N));
   for (int i = 0; i <= sz; ++i) {
      L[i][0] = 0;
      for (int j = 1; j < N; ++j) {
         if (X[j] - X[j - 1] <= vs[i]) L[i][j] = L[i][j - 1];
         else L[i][j] = j;
      }
      R[i][N - 1] = N - 1;
      for (int j = N - 2; j >= 0; --j) {
         if (X[j + 1] - X[j] <= vs[i]) R[i][j] = R[i][j + 1];
         else R[i][j] = j;
      }
   }
   vector<int> forw(1 << sz, -1);
   vector<int> backw(1 << sz, N);
   for (int mask = 0; mask < (1 << sz); ++mask) {
      for (int i = 0; i < sz; ++i) if (!(mask & (1 << i))) {
         int nmask = mask | (1 << i);
         forw[nmask] = max(forw[nmask], R[i][min(forw[mask] + 1, N - 1)]);
         backw[nmask] = min(backw[nmask], L[i][max(backw[mask] - 1, 0)]);
      }
   }
   vector<int> cnt(N);
   for (int mask = 0; mask < (1 << sz); ++mask) {
      int lv = forw[mask];
      int rv = backw[mask ^ ((1 << sz) - 1)];
      int low = L[sz][max(rv - 1, 0)];
      int high = R[sz][min(lv + 1, N - 1)];
      if (low <= high) {
         ++cnt[low];
         if (high + 1 < N) --cnt[high + 1];
      }
   }
   for (int i = 0; i < N; ++i) {
      if (i) cnt[i] += cnt[i - 1];
      cout << (cnt[i] ? "Possible" : "Impossible") << "\n";
   }
}
