#include <bits/stdc++.h>
using namespace std;
int N, V;
int X[200005];
bool res[200005];
vector<vector<int>> split_v(int ps, int tv, int& nps, vector<vector<int>>& xs) {
  int n = xs.size();
  vector<vector<int>> vs;
  int maxi_nc = 0;
  nps = 0;
  for (int i = 0; i < n; i++) {
    if (i == ps) continue;
    int pv = -2 * 1000000000;
    vector<int> v;
    int nc = 1;
    for (int x : xs[i]) {
      if (abs(x - ps) <= tv) {
        v.emplace_back(x);
      } else {
        vs.emplace_back(v);
        v.emplace_back(x);
        nc++;
      }
    }
    if (maxi_nc < nps) {
      maxi_nc = max(maxi_nc, nc);
      nps = i;
    }
  }
  return vs;
}
bool F[200005];
bool solve(int ps, vector<vector<int>> xs) {
  int nps;
  int tv = V;
  memset(F, 0, sizeof(F));
  for (int v : xs[ps]) F[v] = true;
  xs = split_v(ps, V / 2, nps, xs);
  while (tv > 0) {
    tv /= 2;
    split_v(-1, tv / 2, nps, xs);
    ps = nps;
    for (int v : xs[ps]) F[v] = true;
    xs = split_v(ps, tv / 2, nps, xs);
  }
  for (int i = 0; i < N; i++)
    if (!F[i]) return false;
  return true;
}
int main() {
  cin >> N >> V;
  vector<vector<int>> xs;
  vector<int> x;
  int pv = -2 * 1000000000;
  for (int i = 0; i < N; i++) {
    cin >> X[i];
    if (abs(X[i] - pv) <= V) {
      x.emplace_back(X[i]);
    } else {
      xs.emplace_back(x);
      x.emplace_back(X[i]);
    }
    pv = X[i];
  }
  xs.emplace_back(x);
  int jc = 0;
  int tv = V;
  while (tv > 0) {
    tv /= 2;
    jc++;
  }
  if (jc + 1 < xs.size()) {
    for (int i = 0; i < N; i++) cout << "Impossible" << endl;
  } else {
    for (int i = 0; i < N; i++) {
      if (solve(i, xs))
        for (int v : xs[i]) res[v] = true;
    }
    for (int i = 0; i < N; i++)
      if (res[i])
        cout << "Possible" << endl;
      else
        cout << "Impossible" << endl;
  }
}
