#include <bits/stdc++.h>
using std::cin;
using std::cout;
const int maxn = 200200;
const int mod = 998244353;
inline long long pow(long long a, int b, int ans = 1) {
  for (; b; b >>= 1, a = a * a % mod)
    if (b & 1) ans = ans * a % mod;
  return ans;
}
inline long long inverse(int x) { return pow(x, mod - 2); }
int n, v, lg;
int g0[1 << 18], g1[1 << 18];
int x[maxn], ans[maxn];
std::vector<std::pair<int, int> > vec[233];
inline void init(std::vector<std::pair<int, int> >& v, int d) {
  int l = 1;
  for (int i = 2; i <= n; ++i)
    if (x[i] - x[i - 1] > d) v.emplace_back(l, i - 1), l = i;
  v.emplace_back(l, n);
}
inline void up(int& x, int y) {
  if (x < y) x = y;
}
inline void down(int& x, int y) {
  if (x > y) x = y;
}
int main() {
  std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> v;
  for (int i = (1), iend = (n); i <= iend; ++i) cin >> x[i];
  for (; v >> lg; ++lg)
    if (v >> lg) init(vec[lg], v >> lg);
  init(vec[lg++], 0);
  if (vec[0].size() < 20) {
    std::fill(g1, g1 + (1 << lg), n + 1);
    for (int i = (0), iend = ((1 << lg) - 1); i <= iend; ++i) {
      for (int j = (1), jend = (lg - 1); j <= jend; ++j)
        if ((i >> j & 1) == 0) {
          int l = 0, r = vec[j].size();
          for (; l + 1 != r;)
            (vec[j][l + r >> 1].first <= g0[i] + 1 ? l : r) = l + r >> 1;
          up(g0[i | 1 << j], vec[j][l].second), l = -1, r = vec[j].size() - 1;
          for (; l + 1 != r;)
            (vec[j][l + r >> 1].second >= g1[i] - 1 ? r : l) = l + r >> 1;
          down(g1[i | 1 << j], vec[j][r].first);
        }
    }
    for (std::pair<int, int> i : *vec) {
      for (int j = 0; j < 1 << lg; j += 2) {
        if (g0[j] >= i.first - 1 &&
            i.second + 1 >= g1[~j & (1 << lg) - 1 & -2]) {
          std::fill(ans + i.first, ans + i.second + 1, 1);
          break;
        }
      }
    }
  }
  for (int i = (1), iend = (n); i <= iend; ++i) {
    cout << (ans[i] ? "Possible" : "Impossible") << '\n';
  }
}
