#include <bits/stdc++.h>
using namespace std;
namespace fastIO1 {
inline char read() {
  static const int IN_LEN = 1000000;
  static char buf[IN_LEN], *s, *t;
  return (s == t               ? t = (s = buf) + fread(buf, 1, IN_LEN, stdin),
          (s == t ? -1 : *s++) : *s++);
}
template <class T>
inline void read(T &x) {
  static bool iosig;
  static char c;
  for (iosig = false, c = read(); !isdigit(c); c = read()) {
    if (c == '-') iosig = true;
    if (c == -1) return;
  }
  for (x = 0; isdigit(c); c = read()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  if (iosig) x = -x;
}
inline char readc(char &c) {
  for (c = read(); !isalpha(c) && !isdigit(c); c = read())
    if (c == -1) return 0;
}
const int OUT_LEN = 10000000;
char obuf[OUT_LEN], *ooh = obuf;
inline void print(char c) {
  if (ooh == obuf + OUT_LEN) fwrite(obuf, 1, OUT_LEN, stdout), ooh = obuf;
  *ooh++ = c;
}
template <class T>
inline void print(T x) {
  static int buf[30], cnt;
  if (x == 0)
    print('0');
  else {
    if (x < 0) print('-'), x = -x;
    for (cnt = 0; x; x /= 10) buf[++cnt] = x % 10 + 48;
    while (cnt) print((char)buf[cnt--]);
  }
}
inline void flush() { fwrite(obuf, 1, ooh - obuf, stdout); }
}  // namespace fastIO1
namespace fastIO2 {
template <class T>
inline void read(T &x) {
  static bool iosig;
  static char c;
  for (iosig = false, c = getchar(); !isdigit(c); c = getchar()) {
    if (c == '-') iosig = true;
    if (c == -1) return;
  }
  for (x = 0; isdigit(c); c = getchar()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  if (iosig) x = -x;
}
}  // namespace fastIO2
using namespace fastIO1;
int n, m, p[(1050000)], cnt, ri[(1050000)], le[(1050000)];
vector<int> seg[22];
void spj() {
  if (seg[cnt].size() <= cnt + 2) return;
  for (int i = 1; i <= n; i++) puts("Impossible");
  exit(0);
}
int main() {
  read(n), read(m);
  for (int i = 1; i <= n; i++) read(p[i]);
  p[n + 1] = (0x7f7f7f7f), p[0] = -(0x7f7f7f7f);
  for (cnt = 0; (m >> cnt) > 0; cnt++)
    ;
  for (int i = 0; i <= cnt; i++)
    for (int j = 0; j <= n; j++)
      if (p[j + 1] - p[j] > (m >> i)) seg[cnt - i].push_back(j);
  spj();
  for (int i = 0; i < (1 << cnt); i++) le[i] = n + 1, ri[i] = 0;
  for (int i = 0; i < (1 << cnt); i++)
    for (int j = cnt - 1; ~j; j--)
      if (!(i & (1 << j))) {
        int v = i | (1 << j);
        if (ri[v] != n + 1)
          ri[v] =
              max(ri[v], *(upper_bound(seg[j].begin(), seg[j].end(), ri[i])));
        if (le[v] != 1)
          le[v] = min(
              le[v],
              *(lower_bound(seg[j].begin(), seg[j].end(), le[i] - 1) - 1) + 1);
      }
  for (int i = 0; i < seg[cnt].size() - 1; i++) {
    bool fl = 0;
    for (int j = 0; j < (1 << cnt); j++)
      if (ri[j] >= seg[cnt][i] &&
          le[((1 << cnt) - 1) ^ j] <= seg[cnt][i + 1] + 1) {
        fl = 1;
        break;
      }
    for (int tt = seg[cnt][i] + 1; tt <= seg[cnt][i + 1]; tt++)
      if (!fl)
        puts("Impossible");
      else
        puts("Possible");
  }
}
