#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
int N, V;
int x[maxn];
int id[maxn];
int m, cnt;
int val[20];
bool f[2][1 << 20][20];
bool ans[20];
bool F[20][1 << 20];
bool G[20][1 << 20];
int main() {
  scanf("%d%d", &N, &V);
  for (int v = V / 2; v > 0; v /= 2) val[m++] = v;
  val[m++] = 0;
  for (int i = 0; i < N; ++i) scanf("%d", &x[i]);
  id[0] = 0;
  cnt = 1;
  for (int i = 1; i < N; ++i) {
    if (x[i] - x[i - 1] > V)
      id[i] = cnt++;
    else
      id[i] = id[i - 1];
  }
  if (cnt == 1) {
    for (int i = 0; i < N; ++i) puts("Possible");
    return 0;
  }
  if (cnt > 20) {
    for (int i = 0; i < N; ++i) puts("Impossible");
    return 0;
  }
  for (int j = 0; j < 1 << m; ++j)
    for (int k = 0; k < m; ++k)
      if (j >> k & 1) f[0][j][k] = true;
  if (id[0] != id[1])
    for (int j = 0; j < 1 << m; ++j) F[id[0]][j] = true;
  for (int i = 1, p = 0; i < N; ++i) {
    p ^= 1;
    for (int j = 0; j < 1 << m; ++j) {
      for (int k = 0; k < m; ++k)
        if (j >> k & 1) {
          f[p][j][k] = 0;
          for (int l = 0; l < m; ++l) f[p][j][k] |= f[p ^ 1][j ^ (1 << k)][l];
          if (x[i] - x[i - 1] <= val[k]) f[p][j][k] |= f[p ^ 1][j][k];
        }
    }
    if (i == N - 1 || id[i + 1] != id[i]) {
      for (int j = 0; j < 1 << m; ++j) {
        for (int k = 0; k < m; ++k)
          if (j >> k & 1) {
            F[id[i]][j] |= f[p][j][k];
          }
      }
    }
  }
  memset(f, 0, sizeof(f));
  for (int j = 0; j < 1 << m; ++j)
    for (int k = 0; k < m; ++k)
      if (j >> k & 1) f[0][j][k] = true;
  if (id[N - 1] != id[N - 2])
    for (int j = 0; j < 1 << m; ++j) G[id[N - 1]][j] = true;
  for (int i = N - 2, p = 0; i >= 0; --i) {
    p ^= 1;
    for (int j = 0; j < 1 << m; ++j) {
      for (int k = 0; k < m; ++k)
        if (j >> k & 1) {
          f[p][j][k] = 0;
          for (int l = 0; l < m; ++l) f[p][j][k] |= f[p ^ 1][j ^ (1 << k)][l];
          if (x[i + 1] - x[i] <= val[k]) f[p][j][k] |= f[p ^ 1][j][k];
        }
    }
    if (i == 0 || id[i - 1] != id[i]) {
      for (int j = 0; j < 1 << m; ++j) {
        for (int k = 0; k < m; ++k)
          if (j >> k & 1) {
            G[id[i]][j] |= f[p][j][k];
          }
      }
    }
  }
  const int mask = (1 << m) - 1;
  for (int i = 0; i < cnt; ++i) {
    if (i == 0) {
      for (int k = 0; k < 1 << m; ++k)
        if (G[i + 1][k]) {
          ans[i] = true;
          break;
        }
    } else if (i == cnt - 1) {
      for (int k = 0; k < 1 << m; ++k)
        if (F[i - 1][k]) {
          ans[i] = true;
          break;
        }
    } else {
      for (int k = 0; k < 1 << m; ++k) {
        if (F[i - 1][k] && G[i + 1][mask ^ 1]) {
          ans[i] = true;
          break;
        }
      }
    }
  }
  for (int i = 0; i < N; ++i) puts(ans[id[i]] ? "Possible" : "Impossible");
  return 0;
}
