#include <bits/stdc++.h>
using namespace std;
const int mxn = 1 << 18;
int n, m, v[20], a[mxn], bel[mxn][20], be[mxn][20], en[mxn][20], ans[mxn];
int cnt[20], bit[mxn];
inline void add(int i, int x) {
  if (i)
    for (; i <= n; i += i & -i) bit[i] += x;
}
inline int sum(int i) {
  static int r;
  for (r = 0; i > 0; i -= i & -i) r += bit[i];
  return r;
}
char DFS(int d, int x) {
  int i, r = 0;
  if (cnt[d] == 1) return 1;
  for (i = d + 1; i < m; ++i) cnt[i] -= bel[en[x][d]][i] - bel[be[x][d]][i] + 1;
  cnt[m] -= en[x][d] - be[x][d] + 1;
  if (d == m - 1 && cnt[m] == 1) {
    for (i = d + 1; i < m; ++i)
      cnt[i] += bel[en[x][d]][i] - bel[be[x][d]][i] + 1;
    cnt[m] += en[x][d] - be[x][d] + 1;
    return 1;
  }
  if (cnt[d + 1] > m - d) {
    for (i = d + 1; i < m; ++i)
      cnt[i] += bel[en[x][d]][i] - bel[be[x][d]][i] + 1;
    cnt[m] += en[x][d] - be[x][d] + 1;
    return 0;
  }
  add(en[x][d] + 1, 1), add(be[x][d], -1);
  for (i = 0; i < bel[n - 1][d + 1]; ++i)
    if (sum(en[i][d + 1] + 1) - sum(be[i][d + 1]) == 0) r |= DFS(d + 1, i);
  add(en[x][d] + 1, -1), add(be[x][d], 1);
  for (i = d + 1; i < m; ++i) cnt[i] += bel[en[x][d]][i] - bel[be[x][d]][i] + 1;
  cnt[m] += en[x][d] - be[x][d] + 1;
  return r;
}
int main() {
  int i, j, k;
  scanf("%d%d", &n, v);
  for (i = 1; v[i - 1] / 2; ++i) v[i] = v[i - 1] >> 1;
  m = i;
  for (i = 0; i < n; ++i) scanf("%d", a + i);
  for (i = 1; i < n; ++i)
    for (j = 0; j < m; ++j)
      if (a[i] - a[i - 1] <= v[j])
        bel[i][j] = bel[i - 1][j];
      else
        bel[i][j] = bel[i - 1][j] + 1;
  for (j = 0; j < m; ++j) {
    be[0][j] = 0;
    for (i = 0; i < n - 1; ++i)
      if (bel[i][j] != bel[i + 1][j])
        en[bel[i][j]][j] = i, be[bel[i + 1][j]][j] = i + 1;
    en[bel[n - 1][j]][j] = n - 1;
    cnt[j] = bel[n - 1][j] + 1;
  }
  cnt[m] = n;
  for (i = 0; i < bel[n - 1][0] + 1; ++i)
    if (DFS(0, i))
      for (j = be[i][0]; j < en[i][0] + 1; ++j) ans[j] = 1;
  for (i = 0; i < n; ++i) puts(ans[i] ? "Possible" : "Impossible");
  return 0;
}
