#include <bits/stdc++.h>
using namespace std;
int const M = 20;
int const N = (1 << M);
string const YES = "Possible";
string const NO = "Impossible";
int n, v, x[N];
int le[N][M], ri[N][M];
int cnt;
string ans[N];
void setAns(string val, int l, int r) {
  for (int i = l; i < r + 1; ++i) ans[i] = val;
}
void print() {
  for (int i = 1; i < n + 1; ++i) printf("%s\n", ans[i].c_str());
  exit(0);
}
void check() {
  int cn = cnt + 1;
  int v = 1;
  while (v <= n) {
    v = ri[v][0] + 1;
    --cn;
  }
  if (cn < 0) {
    setAns(NO, 1, n);
    print();
  }
}
void build() {
  int vi = v;
  for (int i = 0; i < M; ++i) {
    cnt = i;
    le[1][i] = x[1];
    for (int j = 2; j < n + 1; ++j) {
      if (x[j] - x[j - 1] <= vi)
        le[j][i] = le[j - 1][i];
      else
        le[j][i] = j;
    }
    ri[n][i] = n;
    for (int j = n - 1; j > 0; --j) {
      if (x[j + 1] - x[j] <= vi)
        ri[j][i] = ri[j + 1][i];
      else
        ri[j][i] = j;
    }
    if (vi == 0) break;
    vi /= 2;
  }
}
int dl[N], dr[N];
void remax(int &a, int b) { a = max(a, b); }
void remin(int &a, int b) { a = min(a, b); }
void calcDp() {
  dl[0] = 0;
  for (int i = 0; i < (1 << cnt); ++i) {
    for (int j = 0; j < cnt; ++j) {
      if ((1 << j) & i) continue;
      int nval = dl[i];
      if (nval != n) {
        nval = ri[dl[i] + 1][j + 1];
      }
      remax(dl[((1 << j) ^ i)], nval);
    }
  }
  for (int i = 0; i < (1 << cnt); ++i) dr[i] = n + 1;
  for (int i = 0; i < (1 << cnt); ++i) {
    for (int j = 0; j < cnt; ++j) {
      if ((1 << j) & i) continue;
      int nval = dr[i];
      if (nval != 1) {
        nval = le[dr[i] - 1][j + 1];
      }
      remin(dr[((1 << j) ^ i)], nval);
    }
  }
}
void findAnswers() {
  int v, nxt;
  v = 1;
  while (v <= n) {
    nxt = ri[v][0];
    bool can = false;
    for (int i = 0; i < (1 << (cnt)); ++i) {
      int maskL = i;
      int maskR = (((1 << (cnt)) - 1) ^ maskL);
      int lb = max(dl[maskL], 1);
      int rb = min(dr[maskR], n);
      if (lb + 1 >= v && rb - 1 <= nxt) {
        can = true;
        break;
      }
    }
    if (can) {
      setAns(YES, v, nxt);
    } else {
      setAns(NO, v, nxt);
    }
    v = nxt + 1;
  }
}
void solve() {
  scanf("%d %d", &n, &v);
  for (int i = 1; i < n + 1; ++i) scanf("%d", &x[i]);
  build();
  while (false) {
  };
  check();
  calcDp();
  findAnswers();
  print();
}
int main() {
  solve();
  return 0;
}
