#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long xx = 0, flagg = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') {
    flagg = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    xx = xx * 10 + ch - '0';
    ch = getchar();
  }
  return xx * flagg;
}
void pus(long long xx, long long flagg) {
  if (xx < 0) {
    putchar('-');
    xx = -xx;
  }
  if (xx >= 10) pus(xx / 10, 0);
  putchar(xx % 10 + '0');
  if (flagg == 1) putchar(' ');
  if (flagg == 2) putchar('\n');
  return;
}
int n, m, m1, v, i, j, k, x, a[200005], b[25], bz1[200005][25], bz2[200005][25];
int r[200005][25], l[200005][25], f[400005], g[400005], book[200005], flag;
int minn(int u, int v) { return u < v ? u : v; }
int maxx(int u, int v) { return u > v ? u : v; }
int main() {
  n = read();
  v = read();
  x = v;
  for (i = 0; x != 0; i++) {
    b[i] = x;
    x >>= 1;
  }
  m = i;
  for (i = 1; i <= n; i++) a[i] = read();
  for (i = 1; i < n; i++) bz1[i][0] = a[i + 1] - a[i];
  for (i = 2; i <= n; i++) bz2[i][0] = a[i] - a[i - 1];
  for (j = 1; (1 << j) < n; j++)
    for (i = 1; i + (1 << j) <= n; i++)
      bz1[i][j] = maxx(bz1[i][j - 1], bz1[i + (1 << (j - 1))][j - 1]);
  m1 = j - 1;
  for (j = 1; (1 << j) < n; j++)
    for (i = (1 << j) + 1; i <= n; i++)
      bz2[i][j] = maxx(bz2[i][j - 1], bz2[i - (1 << (j - 1))][j - 1]);
  for (i = 1; i <= n; i++) {
    for (j = 0; j < m; j++) {
      x = i;
      for (k = m1; k >= 0; k--)
        if (x + (1 << k) <= n) {
          if (bz1[x][k] <= b[j]) x += (1 << k);
        }
      r[i][j] = x;
      x = i;
      for (k = m1; k >= 0; k--)
        if (x - (1 << k) >= 1) {
          if (bz2[x][k] <= b[j]) x -= (1 << k);
        }
      l[i][j] = x;
    }
  }
  f[0] = 1;
  g[0] = n;
  for (i = 1; i < (1 << m); i++) {
    f[i] = 1;
    g[i] = n;
    for (j = 0; j < m; j++)
      if (i & (1 << j)) {
        if (f[i ^ (1 << j)] == n)
          f[i] = n;
        else
          f[i] = maxx(f[i],
                      j != 0 ? r[f[i ^ (1 << j)] + 1][j] : f[i ^ (1 << j)] + 1);
        if (g[i ^ (1 << j)] == 1)
          g[i] = 1;
        else
          g[i] = minn(g[i],
                      j != 0 ? l[g[i ^ (1 << j)] - 1][j] : g[i ^ (1 << j)] - 1);
      }
  }
  x = 1;
  i = 0;
  while (x <= n) {
    i++;
    if (i >= 20) {
      for (i = 1; i <= n; i++) printf("Impossible\n");
      return 0;
    }
    flag = 0;
    for (j = 0; j < (1 << m); j++)
      if (f[j] + 1 >= x && g[((1 << m) - 1) ^ j] - 1 <= r[x][0]) flag = 1;
    for (j = x; j <= r[x][0]; j++) book[j] = flag;
    x = r[x][0] + 1;
  }
  for (i = 1; i <= n; i++)
    if (book[i] == 1)
      printf("Possible\n");
    else
      printf("Impossible\n");
  return 0;
}
