#include <bits/stdc++.h>
using namespace std;
long long n, v;
class Alpha {
 public:
  long long f[(1 << 18)];
  pair<long long, long long> g[(1 << 18)][19];
  void setg(long long a[]) {
    for (int k = 0; k < 19; k++) {
      long long bef = -1e18, pnt = 0;
      a[n] = 1e18;
      for (int i = 0; i <= n; i++) {
        if (abs(a[i] - bef) > (v >> k)) {
          for (int j = pnt; j < i; j++) g[j][k] = make_pair(pnt, i - 1);
          pnt = i;
        }
        bef = a[i];
      }
      if ((v >> k) == 0) break;
    }
  }
  void main(long long a[]) {
    setg(a);
    for (int i = 0; i < (1 << 18); i++) f[i] = -1;
    for (int i = 0; i < (1 << 18); i++) {
      for (int j = 0; j < 19 - 1; j++) {
        if (i & (1 << j)) continue;
        f[i + (1 << j)] = max(f[i + (1 << j)], g[f[i] + 1][j + 1].second);
        ;
      }
    }
  }
};
Alpha L, R;
class Solve {
 public:
  unordered_map<long long, bool> mas;
  bool main(long long l, long long r) {
    if (mas.size() > 30) return 0;
    if (mas.find(l) != mas.end()) {
      return mas[l];
    }
    bool res = 0;
    for (int i = 0; i < (1 << 18); i++) {
      int ls = i, rs = (1 << 18) - 1 - i;
      if (l - 1 <= L.f[ls] && n - 1 - R.f[rs] <= r + 1) res = 1;
    }
    mas[l] = res;
    return res;
  }
};
Solve sv;
long long a[(1 << 18)];
int main() {
  cin >> n >> v;
  for (int i = 0; i < n; i++) cin >> a[i];
  L.main(a);
  for (int i = 0; i < n / 2; i++) swap(a[i], a[n - i - 1]);
  R.main(a);
  for (int i = 0; i < n; i++) {
    bool ans = sv.main(L.g[i][0].first, L.g[i][0].second);
    cout << (ans ? "Possible" : "Impossible") << endl;
  }
  return 0;
}
