#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 18;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
int L[N], R[N], x[N];
int p[18][N], q[N];
inline void umin(int &x, int y) { y < x ? x = y : 0; }
inline void umax(int &x, int y) { x < y ? x = y : 0; }
int main() {
  int n = gi() - 1, v = gi(), i, j, k = v, m = 0, u[20] = {}, s;
  while (k) u[m++] = k >>= 1;
  for (i = 0; i <= n; i++) x[i] = gi();
  for (i = n; i; i--) x[i] -= x[i - 1];
  for (i = 0; i < m; i++) {
    p[i][n + 1] = n + 1;
    for (j = n; j; j--) p[i][j] = x[j] <= u[i] ? p[i][j + 1] : j;
  }
  for (s = 0; s < 1 << m; s++)
    for (i = 0; i < m; i++)
      if (!(s >> i & 1)) umax(L[s | 1 << i], p[i][L[s] + 1]);
  for (i = 0; i < m; i++)
    for (j = 1; j <= n; j++) p[i][j] = x[j] <= u[i] ? p[i][j - 1] : j;
  for (s = 0; s < 1 << m; s++) R[s] = n + 1;
  for (s = 0; s < 1 << m; s++)
    for (i = 0; i < m; i++)
      if (!(s >> i & 1))
        umin(R[s | 1 << i], R[s | 1 << i] ? p[i][R[s] - 1] : 0);
  for (i = n, q[n + 1] = n + 1; i; i--) q[i] = x[i] > v ? i : q[i + 1];
  for (i = 0; i <= n; i++) {
    if (!i || x[i] > v) k = i;
    for (s = 0; s < 1 << m; s++)
      if (L[s] >= k && R[s ^ ((1 << m) - 1)] <= q[i + 1]) break;
    puts(s < 1 << m ? "Possible" : "Impossible");
  }
  return 0;
}
