// Задача "Бендер"
// XI Всероссийская командная олимпиада школьников по программированию
// Автор задачи: Антон Банных
// Автор решения: Владимир Ульянцев, ulyantsev@rain.ifmo.ru

uses
    SysUtils, Math;
const
    MAXN = 100000;
    MAXK = 10;
type
    int = longint;

var
    n, k, r, l : int;

function check(a, b, c : int) : boolean;
var
    i, x, t : int;
    ar : array [1..MAXK] of int;
begin
    for i := 1 to k do
        ar[i] := i;

    x := c;
    for i := 1 to n do begin
        t := ar[x mod k + 1];
        ar[x mod k + 1] := ar[(x + 1) mod k + 1];
        ar[(x + 1) mod k + 1] := t;

        x := a * x + b;
    end;

    result := ar[l] = r;
end;

procedure _quit(s: string);
begin
    rewrite(output, 'bender.out');
    writeln(s);
    close(output);
    halt;
end;

var
    a, b, c : int;

begin
    reset(input, 'bender.in');
    read(n, k, r, l);
    close(input);

    assert((1 <= n) and (n <= MAXN));
    assert((2 <= k) and (k <= MAXK));
    assert((1 <= r) and (r <= k));
    assert((1 <= l) and (l <= k));

    for a := 0 to k do begin
        for b := 0 to k do begin
            for c := 0 to k do begin
                if check(a, b, c) then begin
                    _quit(inttostr(a) + ' ' + inttostr(b) + ' ' + inttostr(c));
                end;
            end;
        end;
    end;

    _quit('Impossible');
end.
