#include <bits/stdc++.h>
using namespace std;
const int MAX = 200200;
const int MAXK = 20;
int a[MAX];
int l[MAX][MAXK], r[MAX][MAXK];
int fl[1 << MAXK], fr[1 << MAXK];
int main(void) {
  ios_base::sync_with_stdio(false);
  int N, V;
  cin >> N >> V;
  for (int i = (0); i < (N); ++i) cin >> a[i];
  int K = 0;
  int v[MAXK];
  while (V > 0) {
    v[K++] = V;
    V /= 2;
  }
  v[K++] = 0;
  for (int i = (0); i < (N); ++i) {
    for (int j = (0); j < (K); ++j) {
      if (i > 0 && a[i] - a[i - 1] <= v[j]) {
        l[i][j] = l[i - 1][j];
      } else {
        l[i][j] = i;
      }
    }
  }
  for (int i = N - 1; i >= 0; --i) {
    for (int j = (0); j < (K); ++j) {
      if (i < N - 1 && a[i + 1] - a[i] <= v[j]) {
        r[i][j] = r[i + 1][j];
      } else {
        r[i][j] = i;
      }
    }
  }
  for (int s = (0); s < (1 << K); ++s) fl[s] = 0, fr[s] = N - 1;
  for (int s = (0); s < (1 << K); ++s) {
    for (int j = (0); j < (K); ++j) {
      if (!(s & (1 << j))) {
        int ns = s | (1 << j);
        int nfl = fl[s] == N ? N : r[fl[s]][j] + 1;
        fl[ns] = max(fl[ns], nfl);
        int nfr = fr[s] == -1 ? -1 : l[fr[s]][j] - 1;
        fr[ns] = min(fr[ns], nfr);
      }
    }
  }
  for (int i = (0); i < (N); ++i) {
    bool can = false;
    int all = (1 << K) - 1 - 1;
    for (int s = (0); s < (1 << K); ++s) {
      if ((s & all) == s) {
        if (fl[s] >= l[i][0] && fr[all ^ s] <= r[i][0]) {
          can = true;
          break;
        }
      }
    }
    if (can) {
      cout << "Possible\n";
    } else {
      cout << "Impossible\n";
    }
  }
  return 0;
}
