#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200020;
const int INF = 0x3f3f3f3f;
int n, m, v[20], tot, a[MAXN], d[MAXN];
int f[MAXN][20], g[MAXN][20];
int dpl[MAXN << 1], dpr[MAXN << 1], ans[MAXN];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  while (m) v[tot++] = m, m >>= 1;
  v[tot++] = 0;
  d[1] = d[n + 1] = INF;
  for (int i = 2; i <= n; i++) d[i] = a[i] - a[i - 1];
  for (int j = 0; j < tot; j++) {
    for (int i = 1; i <= n; i++)
      if (d[i] > v[j])
        f[i][j] = i;
      else
        f[i][j] = f[i - 1][j];
    for (int i = n; i; i--)
      if (d[i + 1] > v[j])
        g[i][j] = i;
      else
        g[i][j] = g[i + 1][j];
  }
  memset(dpr, 0x3f, sizeof dpr);
  dpr[0] = n + 1;
  for (int i = 0; i < (1 << tot); i++)
    for (int j = 0; j < tot; j++)
      if (!(i >> j & 1)) {
        if (dpl[i] >= n)
          dpl[i | (1 << j)] = n;
        else
          dpl[i | (1 << j)] = max(dpl[i | (1 << j)], g[dpl[i] + 1][j]);
        if (dpr[i] <= 1)
          dpr[i | (1 << j)] = 1;
        else
          dpr[i | (1 << j)] = min(dpr[i | (1 << j)], f[dpr[i] - 1][j]);
      }
  for (int i = 0; i < (1 << tot); i++) {
    if (i & 1) continue;
    int l = dpl[i], r = dpr[(1 << tot) - 1 - i - 1];
    if (l + 1 >= r)
      ans[1]++;
    else {
      int L = f[l + 1][0], R = g[l + 1][0];
      if (R + 1 >= r) ans[L]++, ans[R + 1]--;
    }
  }
  for (int i = 1, cur = 0; i <= n; i++) {
    cur += ans[i];
    if (cur)
      puts("Possible");
    else
      puts("Impossible");
  }
}
