#include <bits/stdc++.h>
using namespace std;
const pair<int, int> DD[] = {{1, 0},  {1, 1},   {0, 1},  {-1, 1},
                             {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
template <class T>
T smin(T &a, T b) {
  if (a > b) a = b;
  return a;
}
template <class T>
T smax(T &a, T b) {
  if (a < b) a = b;
  return a;
}
int main(void) {
  srand(time(0));
  cout << fixed << setprecision(7);
  cerr << fixed << setprecision(7);
  static int RMQ[20][1 << 20];
  int n, k;
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  static int s[1 << 20];
  for (int i = 1; i <= n; ++i) cin >> s[i];
  for (int i = 1; i < n; ++i) RMQ[0][i] = s[i + 1] - s[i];
  for (int t = 1; n >> t; ++t)
    for (int i = 1; i + (1 << t) <= n + 1; ++i)
      RMQ[t][i] = max(RMQ[t - 1][i], RMQ[t - 1][i + (1 << (t - 1))]);
  static int Log[1 << 20];
  for (int i = 2; i <= (1 << 19); ++i) Log[i] = Log[i / 2] + 1;
  auto get = [&](int l, int r) {
    int lg = Log[r - l + 1];
    return max(RMQ[lg][l], RMQ[lg][r - (1 << lg) + 1]);
  };
  static int D1[1 << 20];
  static int D2[1 << 20];
  int lg = Log[k] + 2;
  const int N = 1 << lg;
  D1[0] = 0;
  for (int mask = 1; mask < N; ++mask)
    for (int i = 0; i < lg; ++i)
      if ((mask >> i) & 1) {
        int number = (k >> i);
        int ans = D1[mask ^ (1 << i)] + 1;
        int was = ans;
        for (int t = 1 << (lg - 1); t; t /= 2)
          if (ans + t <= n && get(was, ans + t - 1) <= number) ans += t;
        smax(D1[mask], ans);
      }
  D2[0] = n + 1;
  for (int mask = 1; mask < N; ++mask) D2[mask] = n + 1;
  for (int mask = 1; mask < N; ++mask)
    for (int i = 0; i < lg; ++i)
      if ((mask >> i) & 1) {
        int number = (k >> i);
        int ans = D2[mask ^ (1 << i)] - 1;
        int was = ans;
        for (int t = 1 << (lg - 1); t; t /= 2)
          if (ans > t && get(ans - t, was - 1) <= number) ans -= t;
        smin(D2[mask], ans);
      }
  static int answer[1 << 20];
  for (int mask1 = 0; mask1 < N; ++mask1)
    if (!(mask1 & 1)) {
      int mask2 = (N - 1) ^ 1 ^ mask1;
      const int l = D1[mask1];
      const int r = D2[mask2];
      if (l + 1 > r - 1)
        answer[1]++, --answer[n + 1];
      else if (l + 1 == r - 1 || get(l + 1, r - 2) <= k)
        ++answer[l + 1], --answer[r];
    }
  for (int i = 1; i <= n; ++i) answer[i] += answer[i - 1];
  for (int i = 1; i <= n; ++i)
    if (answer[i])
      puts("Possible");
    else
      puts("Impossible");
  cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms"
       << '\n';
  return 0;
}
