#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
// #pragma GCCoptimize("O3")
// #pragma GCCtarget("sse4")
// #pragma GCCoptimize("unroll-loops")
#define vi vector<int>
#define PB push_back
#define vll vector<long long>
#define ll long long
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define ld long double
#define vld vector<long double>
#define pll pair<ll, ll>
#define pii pair<int, int>
#define vpii vector<pair<int, int>>
#define GCD __gcd
#define INT __int128
#define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag,tree_order_statistics_node_update>
const ll mod = 998244353;
const ll MOD = 1e9 + 7;
const ll INF = 1e18;
const int inf = 1e9;
struct segtree {
int size;
vll values;
void init(int n){
size = 1;
while (size <= n) size *= 2ll;
values.assign(2 * size, -INF);
}
void set(int i, ll v, int x, int lx, int rx){
if (rx - lx == 1){
values[x] = v;
return;
}
int m = (lx + rx) / 2;
if (i < m) set(i, v, 2 * x + 1, lx, m);
else set(i, v, 2 * x + 2, m, rx);
values[x] = max(values[2 * x + 1], values[2 * x + 2]);
}
void set(int i, ll v){
set(i, v, 0, 0, size);
}
ll calc(int l, int r, int x, int lx, int rx){
if (rx <= l || r <= lx) return -INF;
if (l <= lx && rx <= r) return values[x];
int m = (lx + rx) / 2;
return max(calc(l, r, 2 * x + 1, lx, m), calc(l, r, 2 * x + 2, m, rx));
}
ll calc(int l, int r){
return calc(l, r, 0, 0, size);
}
};
void solve(int tst){
ll n, c, r;
cin >> n >> c >> r;
vll a(n);
string ans = "";
for (int i = 0; i < n; i++) cin >> a[i];
ll vora_laagbe = 0, vorte_parbo = c, cur = c;
for (int i = 0; i < n; i++){
if (a[i] > c){
cout << "Impossible\n";
return;
}
cur -= a[i];
vora_laagbe += a[i];
vorte_parbo += min(r, c - cur);
cur += min(r, c - cur);
if (vora_laagbe > vorte_parbo){
cout << "Impossible\n";
return;
}
}
cur = c;
stack<int> zero;
vora_laagbe -= c;
vora_laagbe = max(vora_laagbe, 0ll);
segtree st;
st.init(n + 10);
vll fuel(n + 10);
for (int i = 0; i < n; i++){
if (cur >= a[i]){
// cout << vora_laagbe << "\n";
cur -= a[i];
if (vora_laagbe && cur + r <= c){
cur += r;
ans += '1';
vora_laagbe = max(vora_laagbe - r, 0ll);
}
else if (i + 1 < n && cur < a[i + 1]){
vora_laagbe = max(vora_laagbe - min(r, c - cur), 0ll);
cur += min(r, c - cur);
ans += '1';
}
else {
ans += '0';
zero.push(i);
}
st.set(i, cur);
fuel[i] = cur;
}
else {
if (zero.empty()) {
cout << "Impossible\n";
return;
}
int last = zero.top();
zero.pop();
ans[last] = '1';
ll val1 = min(r, c - fuel[last]);
ll val2 = c - st.calc(last, i);
val2 = min(val2, c);
cur += max(min(val1, val2), 0ll);
vora_laagbe -= max(min(val1, val2), 0ll);
if (cur < a[i]){
cout << "Impossible\n";
return;
}
i--;
}
}
cout << ans << "\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
// pre();
int tc = 1;
cin >> tc;
for (int i = 1; i <= tc; i++){
solve(i);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCi8vICNwcmFnbWEgR0NDb3B0aW1pemUoIk8zIikKLy8gI3ByYWdtYSBHQ0N0YXJnZXQoInNzZTQiKQovLyAjcHJhZ21hIEdDQ29wdGltaXplKCJ1bnJvbGwtbG9vcHMiKQoKI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIHZsbCB2ZWN0b3I8bG9uZyBsb25nPgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHZsZCB2ZWN0b3I8bG9uZyBkb3VibGU+CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIHZwaWkgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PgojZGVmaW5lIEdDRCBfX2djZAojZGVmaW5lIElOVCBfX2ludDEyOAoKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGxsLCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8bGw+LCByYl90cmVlX3RhZyx0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+Cgpjb25zdCBsbCBtb2QgPSA5OTgyNDQzNTM7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmNvbnN0IGxsIElORiA9IDFlMTg7CmNvbnN0IGludCBpbmYgPSAxZTk7CgpzdHJ1Y3Qgc2VndHJlZSB7CgogICAgaW50IHNpemU7CiAgICB2bGwgdmFsdWVzOwoKICAgIHZvaWQgaW5pdChpbnQgbil7CiAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgd2hpbGUgKHNpemUgPD0gbikgc2l6ZSAqPSAybGw7CiAgICAgICAgdmFsdWVzLmFzc2lnbigyICogc2l6ZSwgLUlORik7CiAgICB9CgogICAgdm9pZCBzZXQoaW50IGksIGxsIHYsIGludCB4LCBpbnQgbHgsIGludCByeCl7CiAgICAgICAgaWYgKHJ4IC0gbHggPT0gMSl7CiAgICAgICAgICAgIHZhbHVlc1t4XSA9IHY7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaW50IG0gPSAobHggKyByeCkgLyAyOwogICAgICAgIGlmIChpIDwgbSkgc2V0KGksIHYsIDIgKiB4ICsgMSwgbHgsIG0pOwogICAgICAgIGVsc2Ugc2V0KGksIHYsIDIgKiB4ICsgMiwgbSwgcngpOwogICAgICAgIHZhbHVlc1t4XSA9IG1heCh2YWx1ZXNbMiAqIHggKyAxXSwgdmFsdWVzWzIgKiB4ICsgMl0pOwogICAgfQoKICAgIHZvaWQgc2V0KGludCBpLCBsbCB2KXsKICAgICAgICBzZXQoaSwgdiwgMCwgMCwgc2l6ZSk7CiAgICB9CgogICAgbGwgY2FsYyhpbnQgbCwgaW50IHIsIGludCB4LCBpbnQgbHgsIGludCByeCl7CiAgICAgICAgaWYgKHJ4IDw9IGwgfHwgciA8PSBseCkgcmV0dXJuIC1JTkY7CiAgICAgICAgaWYgKGwgPD0gbHggJiYgcnggPD0gcikgcmV0dXJuIHZhbHVlc1t4XTsKICAgICAgICBpbnQgbSA9IChseCArIHJ4KSAvIDI7CiAgICAgICAgcmV0dXJuIG1heChjYWxjKGwsIHIsIDIgKiB4ICsgMSwgbHgsIG0pLCBjYWxjKGwsIHIsIDIgKiB4ICsgMiwgbSwgcngpKTsKICAgIH0KCiAgICBsbCBjYWxjKGludCBsLCBpbnQgcil7CiAgICAgICAgcmV0dXJuIGNhbGMobCwgciwgMCwgMCwgc2l6ZSk7CiAgICB9Cgp9OwoKdm9pZCBzb2x2ZShpbnQgdHN0KXsgICAgCgogICAgbGwgbiwgYywgcjsKICAgIGNpbiA+PiBuID4+IGMgPj4gcjsKCiAgICB2bGwgYShuKTsKICAgIHN0cmluZyBhbnMgPSAiIjsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IGFbaV07CgogICAgbGwgdm9yYV9sYWFnYmUgPSAwLCB2b3J0ZV9wYXJibyA9IGMsIGN1ciA9IGM7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGlmIChhW2ldID4gYyl7CiAgICAgICAgICAgIGNvdXQgPDwgIkltcG9zc2libGVcbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY3VyIC09IGFbaV07CiAgICAgICAgdm9yYV9sYWFnYmUgKz0gYVtpXTsKICAgICAgICB2b3J0ZV9wYXJibyArPSBtaW4ociwgYyAtIGN1cik7CiAgICAgICAgY3VyICs9IG1pbihyLCBjIC0gY3VyKTsKICAgICAgICBpZiAodm9yYV9sYWFnYmUgPiB2b3J0ZV9wYXJibyl7CiAgICAgICAgICAgIGNvdXQgPDwgIkltcG9zc2libGVcbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgY3VyID0gYzsKCiAgICBzdGFjazxpbnQ+IHplcm87CgogICAgdm9yYV9sYWFnYmUgLT0gYzsKICAgIHZvcmFfbGFhZ2JlID0gbWF4KHZvcmFfbGFhZ2JlLCAwbGwpOwoKICAgIHNlZ3RyZWUgc3Q7CiAgICBzdC5pbml0KG4gKyAxMCk7CgogICAgdmxsIGZ1ZWwobiArIDEwKTsKCgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGlmIChjdXIgPj0gYVtpXSl7CiAgICAgICAgICAgIC8vIGNvdXQgPDwgdm9yYV9sYWFnYmUgPDwgIlxuIjsKICAgICAgICAgICAgY3VyIC09IGFbaV07CiAgICAgICAgICAgIGlmICh2b3JhX2xhYWdiZSAmJiBjdXIgKyByIDw9IGMpewogICAgICAgICAgICAgICAgY3VyICs9IHI7CiAgICAgICAgICAgICAgICBhbnMgKz0gJzEnOwogICAgICAgICAgICAgICAgdm9yYV9sYWFnYmUgPSBtYXgodm9yYV9sYWFnYmUgLSByLCAwbGwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGkgKyAxIDwgbiAmJiBjdXIgPCBhW2kgKyAxXSl7CiAgICAgICAgICAgICAgICB2b3JhX2xhYWdiZSA9IG1heCh2b3JhX2xhYWdiZSAtIG1pbihyLCBjIC0gY3VyKSwgMGxsKTsKICAgICAgICAgICAgICAgIGN1ciArPSBtaW4ociwgYyAtIGN1cik7CiAgICAgICAgICAgICAgICBhbnMgKz0gJzEnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgYW5zICs9ICcwJzsKICAgICAgICAgICAgICAgIHplcm8ucHVzaChpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdC5zZXQoaSwgY3VyKTsKICAgICAgICAgICAgZnVlbFtpXSA9IGN1cjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh6ZXJvLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIkltcG9zc2libGVcbiI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IGxhc3QgPSB6ZXJvLnRvcCgpOwogICAgICAgICAgICB6ZXJvLnBvcCgpOwogICAgICAgICAgICBhbnNbbGFzdF0gPSAnMSc7CiAgICAgICAgICAgIGxsIHZhbDEgPSBtaW4ociwgYyAtIGZ1ZWxbbGFzdF0pOwogICAgICAgICAgICBsbCB2YWwyID0gYyAtIHN0LmNhbGMobGFzdCwgaSk7CiAgICAgICAgICAgIHZhbDIgPSBtaW4odmFsMiwgYyk7CiAgICAgICAgICAgIGN1ciArPSBtYXgobWluKHZhbDEsIHZhbDIpLCAwbGwpOwogICAgICAgICAgICB2b3JhX2xhYWdiZSAtPSBtYXgobWluKHZhbDEsIHZhbDIpLCAwbGwpOwogICAgICAgICAgICBpZiAoY3VyIDwgYVtpXSl7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJJbXBvc3NpYmxlXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGktLTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKCgp9CgppbnQgbWFpbigpewoKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgLy8gcHJlKCk7CiAgICBpbnQgdGMgPSAxOwogICAgY2luID4+IHRjOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdGM7IGkrKyl7CiAgICAgICAgc29sdmUoaSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=