Mad scientist Mike is busy carrying out experiments in chemistry. Today he will attempt to join three atoms into one molecule.A molecule consists of atoms, with some pairs of atoms connected by atomic bonds. Each atom has a valence number — the number of bonds the atom must form with other atoms. An atom can form one or multiple bonds with any other atom, but it cannot form a bond with itself. The number of bonds of an atom in the molecule must be equal to its valence number.  Mike knows valence numbers of the three atoms. Find a molecule that can be built from these atoms according to the stated rules, or determine that it is impossible.

The single line of the input contains three space-separated integers a, b and c (1 ≤ a, b, c ≤ 106) — the valence numbers of the given atoms.

If such a molecule can be built, print three space-separated integers — the number of bonds between the 1-st and the 2-nd, the 2-nd and the 3-rd, the 3-rd and the 1-st atoms, correspondingly. If there are multiple solutions, output any of them. If there is no solution, print "Impossible" (without the quotes).

NoteThe first sample corresponds to the first figure. There are no bonds between atoms 1 and 2 in this case.The second sample corresponds to the second figure. There is one or more bonds between each pair of atoms.The third sample corresponds to the third figure. There is no solution, because an atom cannot form bonds with itself.The configuration in the fourth figure is impossible as each atom must have at least one atomic bond.

var a,b,c:int64;
begin
	read(a,b,c);
	if (((a+b+c) mod 2=1) or (a+b<c) or (a+c<b) or (b+c<a))then begin
		write('Impossible');
		halt;
	end;
	write((a+b-c) div 2,' ',(b+c-a) div 2,' ',(c+a-b) div 2);
end.

const
        fil='';
var
        f:text;
        a,b,c:longint;
        x,y,z:real;
begin
        assign(f,fil);
        reset(f);
        readln(f,b,c,a);
        x:=(b-c+a)/2;
        y:=(c+b-a)/2;
        z:=(c-b+a)/2;
        if (frac(x)=0)and(x>=0)and(y>=0)and(z>=0) then writeln(y:0:0,' ',z:0:0,' ',x:0:0)
        else writeln('Impossible');
        close(f);
end.

var a,b,c,d,k,l:integer;
begin
read(a,b,c);
d:=a;
k:=0;
l:=l;
if d<b then d:=b;
if d<c then d:=c;
if d=a then begin
                   d:=d-b;
                 while(d<=c)and(l<1)do   if d>c then
                                                          else if d=c then begin
                                                                                write(b,' ',k,' ',c);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       b:=b-1;
                                                                       k:=k+1;
                                                                       c:=c-1;
                                                                       end;
                     if d>c then write('Impossible');
                   end
else if d=b then begin
                   d:=d-a;
                 while(d<=c)and(l<1)do   if d>c then
                                                          else if d=c then begin
                                                                                write(a,' ',c,' ',k);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       a:=a-1;
                                                                       k:=k+1;
                                                                       c:=c-1;
                                                                       end;
                     if d>c then write('Impossible')  ;
                   end
else if d=c then begin
                   d:=d-a;
                 while(d<=b)and(l<1)do   if d>b then
                                                          else if d=b then begin
                                                                                write(k,' ',b,' ',a);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       a:=a-1;
                                                                       k:=k+1;
                                                                       b:=b-1;
                                                                       end;
                    if d>b then write('Impossible');
                   end;
end.

Uses Math;
Var a,b,c,i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Min (a,b) do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

var
  a,b,c,q:longint;
begin
  read(a,b,c);
  for q:=0 to a do
    if (a-q+b-q=c)and(((b-q>0)and(a-q>0))or((b-q=0)xor(a-q=0))) then
      begin
        write(q,' ',b-q,' ',a-q);
        exit;
      end;
  write('Impossible');
end.

var
  a,b:array[1..3] of longint;
  x,i,j,x1,x2,x3:longint;

begin
  for i:=1 to 3 do begin read(a[i]); b[i]:=i; end;
  if (a[1]+a[2]+a[3]) mod 2<>0 then begin writeln('Impossible'); exit; end;
  for i:=1 to 3 do for j:=i+1 to 3 do
    if (a[i]>a[j]) then
    begin
      x:=a[i]; a[i]:=a[j]; a[j]:=x;
      x:=b[i]; b[i]:=b[j]; b[j]:=x;
    end;
  if (a[3]>a[1]+a[2]) then begin writeln('Impossible'); exit; end;
  x1:=-(a[3]-a[1]-a[2]) div 2;
  x2:=a[2]-x1;
  x3:=a[1]-x1;
  if (b[1]=1) and (b[2]=2) then writeln(x1,' ',x2,' ',x3);
  if (b[1]=1) and (b[2]=3) then writeln(x3,' ',x2,' ',x1);
  if (b[1]=2) and (b[2]=1) then writeln(x1,' ',x3,' ',x2);
  if (b[1]=2) and (b[2]=3) then writeln(x3,' ',x1,' ',x2);
  if (b[1]=3) and (b[2]=1) then writeln(x2,' ',x3,' ',x1);
  if (b[1]=3) and (b[2]=2) then writeln(x3,' ',x1,' ',x2);
end.

var a:array[1..3] of longint;
    i,x12,x23,x31:longint;
begin
read(a[1],a[2],a[3]);
for i:=0 to a[1] do
        begin
        if a[3]-i=a[2]-a[1]+i then
                begin
                x12:=a[1]-i;
                x23:=a[2]-a[1]+i;
                x31:=i;
                if (x12<0)or(x23<0)or(x31<0) then continue;
                write(a[1]-i,' ',a[2]-a[1]+i,' ',i);
                halt;
                end;
        end;
writeln('Impossible');
end.

//const fi = 'in.txt';
//      fo = 'out.txt';
var
x1,x2,x3,a,b,c:longint;
begin
// assign(input,fi);reset(input);
// assign(output,fo);rewrite(output);
readln(a,b,c);
if ((a + b - c) mod 2 <> 0) then begin
 writeln('Impossible');
 halt;
end;
x1:=(a+b-c) div 2;
x2:=b-x1;
x3:=c-x2;
if ((x1 = 0) and (x2 = 0)) or ((x1 = 0) and (x3 = 0)) or ((x2 = 0) and (x3 = 0)) then begin
  writeln('Impossible');
  halt;
end;
if (x1 >= 0) and (x2 >= 0) and (x3 >=0) then
writeln(x1,' ',x2,' ',x3)
else writeln('Impossible');
// close(input);close(output);
end.

program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a, b, c, x, y, z : longint;

begin
  {assign(input, 'input.txt');
  reset(input);
  assign(output, 'output.txt');
  rewrite(output);  }
  readln(a, b, c);
  if (a+b+c) mod 2 > 0
  then begin
    writeln('Impossible');
    exit;
  end;

  x := (b+a-c)div 2;
  y := (b+c-a)div 2;
  z := (c+a-b)div 2;
  if (x<0) or (y<0) or (z<0) or (x+y = 0) or (x+z = 0) or (y+z = 0)
  then begin
    writeln('Impossible');
    exit;
  end;
  writeln(x, ' ', y, ' ', z);
end.

program Project1;

{$APPTYPE CONSOLE}

var
  a, b, c, i : integer;

begin
  readln(A, b, c);
  for i := 0 to a do
    if (b - i >=0) and (c - a + i >= 0) and (b - i = c - (a - i)) then begin
      writeln(i, ' ', b - i, ' ', a - i);
      readln;
      readln;
      halt(0);
    end;
  writeln('Impossible');
end.

var
 a,b,c,i,k1,k2,k3,max,min,min2:integer;
begin
k3:=0;
  readln(a,b,c);
 if a+b>c then begin
   while a+b>c do begin
    a:=a-1;
    b:=b-1;
    inc(k3);
   end;
 end;
 k2:=b;
 k1:=a;
 if (a+b<c) or (a<0) or (b<0) or (c<0) then writeln('Impossible') else write(k3,' ',k2,' ',k1);
end.

type    int     =       longint;
var     a,b,c,x,y,z:    Longint;
begin
        readln(a,b,c);
        x := (a+b-c) div 2;
        y := b-x;
        z := c-y;
        if ((a+b+c)mod 2=1)or(x<0)or(y<0)or(z<0) then writeln('Impossible')
        else writeln(x,' ',y,' ',z);
end.

program zzz;
 var a,b,c:longint;

 begin

 read(a,b,c);

 if (a<=(b+c)) and (b<=(a+c)) and (c<=(a+b)) and ((a+b+c) mod 2=0)
 then write((b+a-c) div 2,' ',(b+c-a) div 2,' ',(c+a-b) div 2)
 else write('Impossible')

 end.

var a,b,c,x12,x13,x23:longint;
begin
  readln(a,b,c);
  if (a+b+c) mod 2<>0 then writeln('Impossible')
      else if (a+b<c) or (a+c<b) or (b+c<a) then writeln('Impossible')
      else
      BEGIN
        x12:=abs(a+b-c) div 2;
        x23:=abs(b+c-a) div 2;
        x13:=abs(a+c-b) div 2;
        writeln(x12,' ',x23,' ',x13);
      END;

end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, n, res, a, b, c: integer;
  s, k: string;

begin
  readln(a, b, c);

  for i := 0 to a do
    if ((b - i) + (a - i) = c)and(b - i >= 0)and(a - i >= 0) then
      begin
        write(i, ' ', b - i, ' ', a - i);
        halt(0);
      end;

  write('Impossible');
end.

program p2;
var a,b,c,max:longint;
begin
read(a,b,c);
If a>b then max:=a else max:=b;
If max<c then max:=c;
If max>(a+b+c-max) then writeln('Impossible') else
If (a+b+c) mod 2=1 then writeln('Impossible') else
write((a+b-c) div  2,' ',(b+c-a) div 2,' ', (c+a-b) div 2);
end.

var a,b,c,z,x,y:longint;
begin
readln(a,b,c);
x:=(a-b+c) div 2;
y:=a-x;
z:=b-y;
if (a+b+c) mod 2<>0 then begin writeln('Impossible');halt;end;
if (a=b)and(b=c)and(c=a)and(a mod 2<>0) then begin writeln('Impossible') ;halt;end;
if (x<0)or(y<0)or(z<0) then begin writeln('Impossible');halt;end;

writeln(y,' ',z,' ',x)

end.

var a,b,c,x,y,z:longint;
begin
    readln(a,b,c);
    x:=a+b-c;
    y:=b+c-a;
    z:=c+a-b;
    if (x<0)or(y<0)or(z<0) then
        writeln('Impossible')
    else
        if (x+y=0)or(y+z=0)or(z+x=0)then
            writeln('Impossible')
        else
            if (x mod 2=1)or(y mod 2=1)or(z mod 2=1)then
                writeln('Impossible')
            else
                writeln(x div 2,' ',y div 2,' ',z div 2);
    readln;
end.

var a,b,c:int64;
begin
	read(a,b,c);
	if (((a+b+c) mod 2=1) or (a+b<c) or (a+c<b) or (b+c<a))then begin
		write('Impossible');
		halt;
	end;
	write((a+b-c) div 2,' ',(b+c-a) div 2,' ',(c+a-b) div 2);
end.

Var a, b, c, x, y, z, i: longint;
begin
 read(a, b, c);

 For i:= 0 to a do
  begin
   x:= i;
   y:= b-x;
   z:= a-x;
   if (y<0) or (z<0) or (x+z<>a) or (x+y<>b) or (y+z<>c) then
    continue;
   write(x,' ',y,' ',z);
   exit;
  end;

 write('Impossible');
end.

const
    inp='';
    out='';

var
    a:array[1..3,1..3] of longint;
    ht:array[1..3] of longint;
    ok:boolean;
    fi,fo:text;

procedure input;
begin
    assign(fi,inp);
    reset(fi);
    read(fi,ht[1],ht[2],ht[3]);
    close(fi);
end;

procedure output;
begin
    assign(fo,out);
    rewrite(fo);
    if ok then write(fo,a[1,2],' ',a[2,3],' ',a[3,1])
    else write(fo,'Impossible');
    close(fo);
end;

procedure process;
var
    x,y,z,i,j,k:longint;
begin
    ok:=false;
    for i:=2 to 3 do
        for j:=2 to 3 do
            if i<>j then
            begin
                for k:=0 to ht[1] do
                    begin
                        x:=ht[1]-k;
                        a[1,i]:=k;  a[i,1]:=k;
                        a[1,j]:=x;  a[j,1]:=x;
                        y:=ht[i]-k;
                        z:=ht[j]-x;
                        if (y=z) and (y>=0) and (z>=0) then
                            begin
                                a[i,j]:=y;
                                a[j,i]:=z;
                                ok:=true;
                                output;
                                halt;
                            end;
                    end;
            end;
end;

begin
    input;
    process;
    output;
end.

var a,b,c,i,j,aa:longint;
function min(a,b:longint):longint;
begin
if a<b then min:=a
else min:=b;
end;
begin
readln(a,b,c);
for i:=0 to min(b,c) do
    begin
      aa:=c-i;
      j:=a-aa;
      if (aa+j=a) and (i+j=b) then
        begin
          write(j,' ',i,' ',aa);
          halt;
        end;
    end;
write('Impossible');
end.

var
	a1,a2,a3,a4,b,c,k,s : longint;

begin
	readln(a1,b,c);
	s:=a1+b+c;
	if (s mod 2<>0) then k:=1;
	s:=(a1+b+c) div 2;
	a2:=s-c;
	a3:=s-a1;
	a4:=s-b;
	if (a4<0) or (a3<0) or (a2<0) then k:=1;
	if k=0 then writeln(a2,' ',a3,' ',a4)
	else writeln('Impossible');
end.

var
   v1,v2,v3,s12,s23,s31,sum:longint;
   procedure imp;
      begin
         writeln('Impossible');
         exit;
      end;
Begin
   read(v1,v2,v3);
   s12:=0; s23:=0; s31:=0;
   sum:=v1+v2+v3;
   if sum mod 2=1 then
     begin
        imp;
        exit;
     end;
   if v1>v2+v3 then
     begin
        imp;
        exit;
     end;
   if v2>v1+v3 then
     begin
        imp;
        exit;
     end;
   if v3>v1+v2 then
     begin
        imp;
        exit;
     end;
   s12:=(sum-2*v3) div 2;
   s31:=(sum-2*v2) div 2;
   s23:=(sum-2*v1) div 2;
   write(s12,' ',s23,' ',s31)
End.

program cf200_2;

var
    a,b,c,s:longint;

begin
  readln(a,b,c);
  if (a+b+c) mod 2<>0 then begin
    writeln('Impossible');
    halt
  end
  else begin
    s:=(a+b+c) div 2;
    if (s>a) and (s>b) and (s>c) then
      writeln(s-c,' ',s-a,' ',s-b)
    else if (s=a) and (s>b) and (s>c) then
      writeln(s-c,' ',s-a,' ',s-b)
    else if (s>a) and (s=b) and (s>c) then
      writeln(s-c,' ',s-a,' ',s-b)
    else if (s>a) and (s>b) and (s=c) then
      writeln(s-c,' ',s-a,' ',s-b)
    else
      writeln('Impossible');
  end;
end.

var
  a, b, c, d, e, f: int64;

begin
  readln(a, b, c);
  if (a > b) and (a > c) then begin
    if b + c < a then begin
      writeln('Impossible');
      halt();
    end;
    if (b + c - a) mod 2 = 1 then begin
      writeln('Impossible');
      halt();
    end;
    writeln(b - (b + c - a) div 2, ' ', (b + c - a) div 2,' ', c - (b + c - a) div 2);
  end
  else if (b >= a) and (b > c) then begin
    if a + c < b then begin
      writeln('Impossible');
      halt();
    end;
    if (a + c - b) mod 2 = 1 then begin
      writeln('Impossible');
      halt();
    end;
    writeln(a - (a + c - b) div 2, ' ', c - (a + c - b) div 2,' ', (a + c - b) div 2);
  end
  else begin
    if b + a < c then begin
      writeln('Impossible');
      halt();
    end;
    if (b + a - c) mod 2 = 1 then begin
      writeln('Impossible');
      halt();
    end;
    writeln((b + a - c) div 2, ' ', b - (b + a - c) div 2,' ', a - (b + a - c) div 2);
  end;
end.

program ideone;
var a,b,c,x,y,z,t:integer;
begin
	read (a,b,c);
	if (a>0) and (b>0) and (c>0) and ((a+b+c) mod 2 = 0) then
	begin
	t:=(a+b+c) div 2;
	x:=t-c;
	y:=t-a;
	z:=t-b;
	if (x>=0) and (y>=0) and (z>=0) then
	begin
	write(x,' ',y,' ',z);
	writeln;
	end
	else
	writeln('Impossible');
	end
	else
	writeln('Impossible');
end.

var a,b,c,x,y,z:longint;
begin
  readln(a,b,c);
  if (a+b<c) or (b+c<a) or (a+c<b) or ((a+b+c)and 1<>0) then
    writeln('Impossible')
  else
    writeln((a+b-c)>>1,' ',(-a+b+c)>>1,' ',(+a-b+c)>>1);
end.

program z1;
 var k,i,t,k1,i1,t1,l:longint;
begin
 readln(k,i,t);//1-2, 2-3, 3-1
 while(k+i+t>=2) do
  begin
   if(k>=t)and(i>=t)
    then begin
          inc(k1);
          dec(k);
          dec(i);
         end
    else begin
          if(t>=k)and(i>=k)
           then begin
                 inc(i1);
                 dec(t);
                 dec(i);
                end
           else if(k>=i)and(t>=i)
                 then begin
                       inc(t1);
                       dec(k);
                       dec(t);
                      end;
         end;

  end;
 If(t+k+i<>0)or(t<0)or(k<0)or(i<0)
  then writeln('Impossible')
  else writeln(k1,' ',i1,' ',t1);
end.

Uses Math;
Var a,b,c,i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Min (a,b) do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

const   fi      =       '';
        fo      =       '';
var     f,g:text;
        a,b,c,x,y,z,tg:longint;
procedure       mo;
begin
        assign(f,fi);
        reset(f);
        assign(g,fo);
        rewrite(g);
end;
procedure       dong;
begin
        close(f);
        close(g);
end;
procedure       doc;
begin
        read(f,a,b,c);
        readln(f);
        tg:=a+b+c;
        if tg mod 2=1 then
                begin
                        write(g,'Impossible');
                        dong;
                        halt;
                end;
        tg:=tg div 2;
        x:=tg-c;
        y:=tg-b;
        z:=tg-a;
        if (x<0)or(y<0)or(z<0) then
                begin
                        write(g,'Impossible');
                        dong;
                        halt;
                end;
        write(g,x,' ',z,' ',y);
end;
begin
        mo;
        doc;
        dong;
end.

uses
   math;
var
   i,a,b,c:longint;
   arr:array[1..3,1..3] of longint;
begin
   readln(a,b,c);
   for i:=0 to a do
   begin
      arr[1][2]:=i;
      arr[1][3]:=a-i;
      arr[2][1]:=i;
      if b-i>=0 then
      begin
         arr[2][3]:=b-i;
         arr[3][1]:=a-i;
         arr[3][2]:=b-i;
         if a+b-2*i=c then
         begin
            writeln(arr[1,2],' ',arr[2,3],' ',arr[3,1]);
            halt;
         end;
      end;
   end;
   writeln('Impossible');
end.

var a,b,c,x,y,z:longint;

procedure xuat;
begin

    writeln('Impossible');
    halt;
end;

procedure xuly;
var tg:longint;
begin

    readln(a,b,c);

    tg:=a-b+c;

    if (tg mod 2<>0) or (tg<0) then  xuat;
    z:=tg div 2;

    y:=c-z;
    if y<0 then xuat;

    x:=a-z;
    if x<0 then xuat;

    writeln(x,' ',y,' ',z);
end;

begin

    xuly;
end.

type maxx=array[1..100000] of string;
var ch:char;a,b,g,xv,l,c,i,n,k,z,a1,b1,c1,w,code,j,q:integer;s,s1:string;m:maxx;
begin
 //  assign(input,'input.txt');
 //  assign(output,'output.txt');
   readln(a,b,c);
   if (a+b=0) or (a+c=0) or (c+b=0)
   then Begin
           writeln('Impossible');
           halt(0);
        end;
   if (a>=c) and (a>=b)
   then BEgin
          if b+c>=a
          then if (b+c-a) mod 2=0
               then writeln(b-(b+c-a) div 2,' ',(b+c-a) div 2,' ',c-(b+c-a) div 2)
               else writeln('Impossible')
          else writeln('Impossible');
        end
   else if (b>=a) and (b>=c)
        then Begin
                if a+c>=b
                then if (a+c-b) mod 2=0
                     then writeln(a-(a+c-b) div 2,' ',c-(a+c-b) div 2,' ',(a+c-b) div 2)
                     else writeln('Impossible')
                else writeln('Impossible');
             end
        else Begin
                if a+b>=c
                then if (a+b-c) mod 2=0
                     then writeln((a+b-c) div 2,' ',b-(a+b-c) div 2,' ',a-(a+b-c) div 2)
                     else writeln('Impossible')
                else writeln('Impossible');
             end;
end.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c, i, k: integer;
begin
  read(a, b, c);

  if (a > b) then
    k := b
  else
    k := a;

  for i := 0 to k do
  begin
    if (c = a - i + b - i) then
    begin
      write(i, ' ', b - i, ' ', a - i);
      readln;
      readln;
      halt;
    end;
  end;
  writeln('Impossible');
  readln;
  readln;
end.

var a:array[1..3] of longint;
    i,x12,x23,x31:longint;
begin
read(a[1],a[2],a[3]);
for i:=0 to a[1] do
        begin
        if a[3]-i=a[2]-a[1]+i then
                begin
                x12:=a[1]-i;
                x23:=a[2]-a[1]+i;
                x31:=i;
                if (x12<0)or(x23<0)or(x31<0) then continue;
                write(a[1]-i,' ',a[2]-a[1]+i,' ',i);
                halt;
                end;
        end;
writeln('Impossible');
end.

var a,b,c,x,y,z:longint;
begin
    readln(a,b,c);
    x:=a+b-c;
    y:=b+c-a;
    z:=c+a-b;
    if (x<0)or(y<0)or(z<0) then
        writeln('Impossible')
    else
        if (x+y=0)or(y+z=0)or(z+x=0)then
            writeln('Impossible')
        else
            if (x mod 2=1)or(y mod 2=1)or(z mod 2=1)then
                writeln('Impossible')
            else
                writeln(x div 2,' ',y div 2,' ',z div 2);
    readln;
end.

type    int     =       longint;
var     a,b,c,x,y,z:    Longint;
begin
        readln(a,b,c);
        x := (a+b-c) div 2;
        y := b-x;
        z := c-y;
        if ((a+b+c)mod 2=1)or(x<0)or(y<0)or(z<0) then writeln('Impossible')
        else writeln(x,' ',y,' ',z);
end.

VAR A1,A2,A3,S,X12,X23,X31:LONGINT;
BEGIN
    READLN(A1,A2,A3);
    IF (A1+A2+A3) MOD 2=1 THEN WRITELN('Impossible')
    ELSE
        BEGIN
            S:=(A1+A2+A3) DIV 2;
            X12:=S-A3;X23:=S-A1;X31:=S-A2;
            IF (X12<0)OR(X23<0)OR(X31<0) THEN WRITELN('Impossible')
            ELSE WRITELN(X12,' ',X23,' ',X31);
        END;
END.

var a, b, c, ac, ab, bc:longint;
begin
readln(a, b, c);
ac:=0; bc:=0; ab:=0;
while (a>0)and(b>0)and(c>0) do
 begin
 if (a>=b)and(c>=b)and(a<>0)and(c<>0) then begin
                                      inc(ac);
                                      dec(a);dec(c)
                                      end;
 if (c>=a)and(b>=a)and(b<>0)and(c<>0) then begin
                                      inc(bc);
                                      dec(b);dec(c)
                                      end;
 if (a>=c)and(b>=c)and(a<>0)and(b<>0) then begin
                                      inc(ab);
                                      dec(a);dec(b)
                                      end;
 end;
if a=0 then if (b=c) then writeln(ab, ' ', bc++b, ' ', ac)
                     else writeln('Impossible')
       else if b=0 then if (a=c) then writeln(ab, ' ', bc, ' ', ac+a)
                                 else writeln('Impossible')
                   else if c=0 then if (a=b) then writeln(ab+b, ' ', bc, ' ', ac)
                                             else writeln('Impossible');
end.

Var a,b,c,s:int64;
 begin
  Read(a,b,c);
  s:=a+b+c;
  if s mod 2=1 then
   begin
    Writeln('Impossible');
    halt(0);
   end;
  s:=s div 2;
  if (c>s) or (b>s) or (a>s) then
   begin
    Writeln('Impossible');
    halt(0);
   end;
  Writeln(s-c,' ',s-a,' ',s-b);
 end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, n, res, a, b, c: integer;
  s, k: string;

begin
  readln(a, b, c);

  for i := 0 to a do
    if ((b - i) + (a - i) = c)and(b - i >= 0)and(a - i >= 0) then
      begin
        write(i, ' ', b - i, ' ', a - i);
        halt(0);
      end;

  write('Impossible');
end.

                               {$APPTYPE CONSOLE}
const  besk=2000000000000000000;
type ex=record t,v:int64; end; exx=^ex;
 label 1,2,3,4;
var shag,k,nn,n,i10,razn,n1,dl,ii,jj,i3,i2,i1,j1,k1,kt,ppp,mask,i0,j0,step,i,j,isp,finish:longint;
p3,p,pos,x,y,z,q,a1,leng,t3,kol,cc,m1,pl,sum,p1,p2,m,k2,r,ot,aa,bb,x1,y1,x0,y0,ll,rr,d1,d2,kolvyk,xx2,t1,t2,modul,pp,tt,ot1,ot2,s,kold,kkr:int64;
aeqb,agrb,bgra,koef:int64;
fl0,fl10,fl100,flag2,flag1,flag:boolean;
ott,pp1,pp2,dl1,dl2,dl3,hh,po,pt,doltek,dolpred:extended;
dist:array[-10..3010,-10..3010] of int64;
ddd,distot:double;
l,t,dv,c,b,a,zz: array[-300000..500000] of int64;
est,zapx,zapy:array[-10..20000] of boolean;
dd,gr: array[-20..20,0..10,-50..2000] of int64;
ee,deg,marked:array[-100000..250000] of int64;
{ss:array[0..2000000] of char; }
sss1,sss,sss2:string;
ab:array[-100..200,-100..201,-100..201] of char;
ch11,ch12,ch1,ch:char;
sl,sr :array[-10 ..200000] of int64;
ssot:array[-1000..1100000] of char;
stepen:array[0..1000] of int64;
name:array[0..2000] of string;
function min (a,b:int64):int64;begin min:=b;if a<b then min:=a;  end;
function max (a,b:int64):int64;begin max:=b;if a>b then max:=a;  end;

    function nod(a,b:int64):int64; var p,t:int64;
begin if (a>0)and(b>0) then
   begin while (b>0) do begin t:=a mod b;a:=b;b:=t;    end;
    p:=a;
   end else if a=0 then p:=b else p:=a;
nod:=p;
end;

function degg(a,k:int64):int64; var p:int64;
begin
 if k<=0 then degg:=1 else if odd(k) then degg:=degg(a,k-1)*a mod modul else
   begin  p:=degg(a,k div 2); degg:=p*p mod modul;   end;

end;

begin
 {assign (input,'input.txt');reset(input);
      assign (output,'output.txt'); rewrite(output);
  }
                              modul:=1000000009 ;

 readln(p1,p2,p3); flag:=true;
 t1:=p1+p2-p3; t2:=p1+p3-p2;t3:=p3+p2-p1;
if odd(t1) then flag:=false;
if odd(t2) then flag:=false;
if odd(t3) then flag:=false;
if t1<0 then flag:=false; if t2<0 then flag:=false;if t3<0 then flag:=false;

if flag then write(t1 div 2,' ',t3 div 2,' ',t2 div 2) else write('Impossible');

   1:          close(output);

end.

var a,b,c, max, ans, x,y,z: LongInt;
begin
  Readln(a,b,c);
  if (a>b+c) or (b>a+c) or (c>a+b) or (a=0) or (b=0) or (c=0) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  if a>b then
  begin
    max:=a;
    ans:=b+c;
  end
     else
  begin
    max:=b;
    ans:=a+c;
  end;

  if c>max then
  begin
    max:=c;
    ans:=a+b;
  end;

  x:=(ans-max) div 2 + max - c;
  y:=(ans-max) div 2 + max - a;
  z:=(ans-max) div 2 + max - b;

  if ((ans-max) mod 2 <> 0) or (x<0) or (y<0) or (z<0) or ((x=0) and (y=0)) or ((y=0) and (z=0)) or ((z=0) and (x=0)) or ((x=0) and (y=0) and (z=0)) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  Writeln(x,' ',y,' ',z);
end.

var
	a1,a2,a3,a4,b,c,k,s : longint;

begin
	readln(a1,b,c);
	s:=a1+b+c;
	if (s mod 2<>0) then k:=1;
	s:=(a1+b+c) div 2;
	a2:=s-c;
	a3:=s-a1;
	a4:=s-b;
	if (a4<0) or (a3<0) or (a2<0) then k:=1;
	if k=0 then writeln(a2,' ',a3,' ',a4)
	else writeln('Impossible');
end.

var
i,a,b,c,s:longint;
begin
readln(a,b,c);
for i:=0 to a do
begin
s:=0;
if i=0 then inc(s);
if a-i=0 then inc(s);
if b-i=0 then inc(s);
if (s<=1) and (a-i>=0) and (b-i>=0)and ((a-i)+(b-i)=c) then begin writeln(i,' ',b-i,' ',a-i);halt;end;
end;
writeln('Impossible');
end.

Uses Math;
Var a,b,c,i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Min (a,b) do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

var a,b,c:int64;
    i:longint;
begin
  {$ifndef ONLINE_JUDGE}
  assign(input,'input.txt');reset(input);
    assign(output,'output.txt');rewrite(output);
  {$endif}
  readln(a,b,c);
  for i:=0 to a do
    if(i<=b)and(c-a+i=b-i) then begin writeln(i,' ',b-i,' ',a-i); exit; end;
  writeln('Impossible');
end.

var a,b,c,z,x,y:longint;
begin
readln(a,b,c);
x:=(a-b+c) div 2;
y:=a-x;
z:=b-y;
if (a+b+c) mod 2<>0 then begin writeln('Impossible');halt;end;
if (a=b)and(b=c)and(c=a)and(a mod 2<>0) then begin writeln('Impossible') ;halt;end;
if (x<0)or(y<0)or(z<0) then begin writeln('Impossible');halt;end;

writeln(y,' ',z,' ',x)

end.

program yan;
  var a,b,c,i,j,x,y,a1,b1,c1:longint;
begin
  read(a,b,c); a1:=a; b1:=b; c1:=c;
  if (a>b)and(a>c) then begin x:=a; a:=0; end
    else
      if (b>a)and(b>c) then
        begin x:=b; b:=0; end else begin x:=c; c:=0; end;
  if (x>a+b+c)or((a+b+c-x)mod 2<>0) then write('Impossible')
    else
      begin
        y:=x+((a+b+c-x)div 2);
        write(y-c1,' ',y-a1,' ',y-b1);
      end;
end.

type qq=record
 x,y:longint;
 end;
Var a,b,d,i,j:longint;
    ans:array [0..4] of longint;
    t:array [0..4] of qq;
    c:array [0..4,0..4] of longint;
    x:qq;
 begin
  read(a,b,d);
  t[1].x:=a;
  t[2].x:=b;
  t[3].x:=d;
  t[1].y:=1;
  t[2].y:=2;
  t[3].y:=3;
  for i:=1 to 2 do
   for j:=i+1 to 3 do
    if t[i].x>t[j].x then begin
                           x:=t[i];
                           t[i]:=t[j];
                           t[j]:=x;
                          end;
 {dec(a);
  dec(b);
  dec(c);
  inc(ans[1]);
  inc(ans[2]);
  inc(ans[3]); }
  for i:=1 to t[3].x do
   begin
    if t[2].x>t[1].x then begin
                           inc(c[t[3].y,t[2].y]);
                           inc(c[t[2].y,t[3].y]);
                           dec(t[3].x);
                           dec(t[2].x);
                          end
                     else begin
                           inc(c[t[3].y,t[1].y]);
                           inc(c[t[1].y,t[3].y]);
                           dec(t[3].x);
                           dec(t[1].x);
                          end;;

   end;
  if (t[1].x<0) or (t[2].x<0) then begin writeln('Impossible'); halt(0); end;
  if t[1].x<>t[2].x then begin writeln('Impossible'); halt(0); end;
  inc(c[t[1].y,t[2].y],t[1].x);
  inc(c[t[2].y,t[1].y],t[1].x);
  ans[1]:=c[1,2];
  ans[2]:=c[2,3];
  ans[3]:=c[3,1];
  writeln(ans[1],' ',ans[2],' ',ans[3]);
 end.

uses
   math;
var
   i,a,b,c:longint;
   arr:array[1..3,1..3] of longint;
begin
   readln(a,b,c);
   for i:=0 to a do
   begin
      arr[1][2]:=i;
      arr[1][3]:=a-i;
      arr[2][1]:=i;
      if b-i>=0 then
      begin
         arr[2][3]:=b-i;
         arr[3][1]:=a-i;
         arr[3][2]:=b-i;
         if a+b-2*i=c then
         begin
            writeln(arr[1,2],' ',arr[2,3],' ',arr[3,1]);
            halt;
         end;
      end;
   end;
   writeln('Impossible');
end.

Var a,b,c,x,y,z:longint;
  Begin
    Read(a,b,c);
    if (a+c-b)mod 2<>0 then begin Write('Impossible');exit end;
    z:=(a+c-b)div 2;
    x:=a-z;
    y:=b-x;
    if (x<0)or(y<0)or(z<0)then Write('Impossible')
                          else Write(x,' ',y,' ',z)
  End.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c, k, v1, v2, v3: integer;
  //a: array of integer;
  flag : boolean;

begin
  v1 := 0;
  v2 := 0;
  v3 := 0;
  flag := false;
  read (a, b, c);
  readln;
  if ((a+b+c) mod 2 = 0) and (a > 0) and (b > 0) and (c > 0) then
  begin
    k := 0;
    while (a > 1) and (b > 1) and (c > 1) and (a <= b+c-2) and (b <= a+c-2) and (c <= a+b-2) do
    begin
      //if ((a >= b+c-2) or (b >= a+c-2) or (c >= a+b-2)) then
        //break;
      k := k+1;
      a := a-2;
      b := b-2;
      c := c-2;
    end;
    if (a = b+c) then
    begin
      v1 := b + k;
      v2 := k;
      v3 := c + k;
      flag := true;
    end
    else if (b = a+c) then
    begin
      v1 := a + k;
      v2 := c + k;
      v3 := k;
      flag := true;
    end
    else if (c = a+b) then
    begin
      v1 := k;
      v2 := b + k;
      v3 := a + k;
      flag := true;
    end;
  end;
  if (flag) then
    writeln (v1, ' ', v2, ' ', v3)
  else
    writeln ('Impossible');
  readln;
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x,y:array[1..4] of integer;
    max,s,i,z: integer;
    f: boolean;
begin
  readln(x[1],x[2],x[3]);
  x[4]:=x[1];
  if x[1]>x[2] then max:=1 else max:=2;
  if x[3]>max then max:=3;
  s:=0;
  for i:=1 to 3 do
    if i<>max then s:=s+x[i];
  z:=s-x[max];
  f:=true;
  if (z<0)or(z mod 2<>0) then f:=false
    else begin
      z:=z div 2;
      if x[max+1]<z then f:=false else y[max]:=x[max+1]-z;
      i:=(max+2) mod 3;
      if i=0 then i:=3;
      if x[i]<z then f:=false else y[i]:=x[i]-z;
      i:=(max+1) mod 3;
      if i=0 then i:=3;
      y[i]:=z;

    end;
    if f then writeln(y[1],' ',y[2],' ',y[3])
    else writeln('Impossible');
end.

program molecules;
   var a,b,c,x,y,z,s:longint;
       t:boolean;
begin
        readln(a,b,c); s:=a+b+c;
        t:=true;
        if s mod 2 <>0 then t:=false;
        s:=s div 2;
        x:=s-a;
        y:=s-b;
        z:=s-c;
        if ((x<0) or (y<0) or (z<0)) then t:=false;
        if t then
        begin
                write(z,' ');
                write(x,' ');
                write(y,' ');
        end
        else
        write('Impossible');
end.

var a,b,c,i,j,aa:longint;
function min(a,b:longint):longint;
begin
if a<b then min:=a
else min:=b;
end;
begin
readln(a,b,c);
for i:=0 to min(b,c) do
    begin
      aa:=c-i;
      j:=a-aa;
      if (aa+j=a) and (i+j=b) then
        begin
          write(j,' ',i,' ',aa);
          halt;
        end;
    end;
write('Impossible');
end.

var s,a,b,c,x,y,z,o,q:longint;
begin
readln(a,b,c);
s:=a+b+c;
o:=s;
o:=o div 2;
     if (o+o=s)
     then begin
       x:=o-c;
       y:=o-a;
       z:=o-b;
              if (x=0) and (y=0)
                 then begin
                 Writeln('Impossible');
                 q:=1;
                 end
                 else begin
                      if (x=0) and (z=0)
                      then begin
                      Writeln('Impossible');
                      q:=1;
                      end
                      else begin
                           if (y=0) and (z=0)
                           then begin
                           Writeln('Impossible');
                           q:=1;
                           end
                           else begin
                                if (x<0) or (y<0) or (z<0)
                                then begin
                                Writeln('Impossible');
                                q:=1;
                                end;
                                end;
                                end;
                                end;
                                if q<1
                                then begin
writeln(x,' ',y,' ',z);
end;
end
            else begin
            Writeln('Impossible');
            end;
end.

Var     a, b, c, i, j, k : longint;
Begin
        readln(a,b,c);
        for i:=0 to a do begin
                k := a-i;
                j := b-i;
                if (j = c-k) and (j >= 0) and (k >= 0) then begin
                        writeln(i,' ',j,' ',k);
                        exit;
                end;
        end;
        writeln('Impossible');
End.

var n,a,b,c,i:longint;

begin
read(a,b,c);
if a<b then n:=a else n:=b;
for i:=0 to n do
if a-i+b-i=c then
begin
 write(i,' ',b- i,' ',a-i);
halt;
end;
write('Impossible');
end.

var a,b,c,s1,s2,s3: longint;

begin
//  assign(input,'input.txt'); reset(input);
//  assign(output,'output.txt'); rewrite(output);

    read(a,b,c);

    s1:=a+b-c; s2:=b+c-a; s3:=a+c-b;
    if (s1 mod 2<>0) or (s2 mod 2<>0) or (s3 mod 2<>0) or
       (s1<0) or (s2<0) or (s3<0) or (s1=0) and (s2=0) or
       (s2=0) and (s3=0) or (s1=0) and (s3=0)
       then begin writeln('Impossible'); halt end;

    writeln(s1 div 2,' ',s2 div 2,' ',s3 div 2);
end.

var a,b,c,x,y,z:longint;
begin
        readln(a,b,c);
        x:=b-c+a;
        y:=b+c-a;
        z:=a-b+c;
        if (x<0) or (y<0) or (z<0) or (x and 1=1) or (y and 1 = 1) or (z and 1 =1) then
        begin
                writeln('Impossible');
                exit;
        end;
        writeln(x div 2,' ',y div 2,' ',z div 2);
end.

Var a,b,c,s:int64;
 begin
  Read(a,b,c);
  s:=a+b+c;
  if s mod 2=1 then
   begin
    Writeln('Impossible');
    halt(0);
   end;
  s:=s div 2;
  if (c>s) or (b>s) or (a>s) then
   begin
    Writeln('Impossible');
    halt(0);
   end;
  Writeln(s-c,' ',s-a,' ',s-b);
 end.

program Project1;

{$APPTYPE CONSOLE}

uses
    SysUtils;
var
    a, b, c, i, bc, ac, x, y, z: integer;
    z1: boolean;

begin
    z1 := false;
    readln(a, b, c);
    for i := 0 to b do
    begin
        if (i > a) then
            break;
        bc := b - i;
        ac := a - i;
        if (bc >= 0) and (ac >= 0) and (ac + bc = c) then
        begin
            z1 := true;
            x := i;
            y := bc;
            z := ac;
        end;
    end;
    if z1 then
        writeln(x, ' ', y, ' ', z)
    else
        writeln('Impossible');
    readln;
    readln;
end.

{$MODE OBJFPC}

const
  maxN = 10000;
  fi = 'B.INP';
  fo = 'B.OUT';

var
  a, b, c : integer;

procedure enter;
var
  x1, x2, x3 : integer;
begin
  readln(a,b,c);
  x2 := (b - a + c);
  if (x2 < 0) or (x2 mod 2 <> 0) then
    begin
      writeln('Impossible');
      halt;
    end;
  x2 := x2 div 2;
  x3 := c - x2;
  if x3 < 0 then
    begin
      writeln('Impossible');
      halt;
    end;
  x1 := a - x3;
  if x1 < 0 then
    begin
      writeln('Impossible');
      halt;
    end;
  writeln(x1, ' ',x2,' ',x3);
end;

begin
{$IFNDEF ONLINE_JUDGE}
  assign(input,fi); reset(input);
  assign(output,fo); rewrite(output);
{$ENDIF}
  enter;
end.

program b1;

{$APPTYPE CONSOLE}

var
    x1, x2, x3, a1, a2, a3: Integer;

begin

    readln(x1, x2, x3);
    a1 := 0;
    a2 := 0;
    a3 := 0;
    if odd(x1 + x2 + x3) then
    begin
            Writeln('Impossible');
            Exit;
        end;

    while (x1 + x2 + x3 > 0) do
    begin
        if ((x1 + x2) <= 0) or ((x1 + x3) <= 0) or((x3 + x2) <= 0)then
        begin
            Writeln('Impossible');
            Exit;
        end;
        if (x3 <= x2) and (x3 <= x1) then
        begin
            Dec(x2);
            Dec(x1);
            Inc(a1);
        end
            else
            if (x2 <= x1) and (x2 <= x3) then
            begin
                Dec(x3);
                Dec(x1);
                Inc(a3);
            end
            else
            if (x1 <= x2) and (x1 <= x3) then
            begin
                Dec(x2);
                Dec(x3);
                Inc(a2);
            end;
    end;
    Writeln(a1, ' ', a2, ' ', a3);
end.

program TaskB;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
var
  a, b, c, i: integer;
begin
  read(a, b, c);
  for i := 0 to Min(a, b) do
  begin
    if (c = a - i + b - i) then
    begin
      write(i, ' ', b - i, ' ', a - i);
      halt;
    end;
  end;
  write('Impossible');
end.

var     s, i, a, b, c, x, y, z : longint;
function kt : boolean;
        begin
          kt := false;
          if x + y + z = s then
                if a = z + x then
                        if b = x + y then
                                if c = y + z then
                                        kt := true;
        end;
begin
        readln(a, b, c);
        s := (a + b + c) div 2;
        for x := 0 to a do
                begin
                  y := b-x;
                  z := a-x;
                  if kt and (y >= 0) and (z >= 0) then
                        begin
                          writeln(x,' ',y,' ',z);
                          halt;
                        end;
                end;
        writeln('Impossible');
end.

var
  a,b,c,x,y,z,i:integer;
begin
  readln(a,b,c);
  for i:=0 to a do
    if(a-i+(b-i)=c)then
    begin
      x:=i;
      y:=b-i;
      z:=a-i;
      if(x<0)or(y<0)or(z<0)then
        continue
      else
        writeln(x,' ',y,' ',z);
      halt(0);
    end;
  writeln('Impossible');
  readln;
  readln;
end.

var a,b,c,c1,i:longint;
begin
//assign(input,'jdfz.in');reset(input);
//assign(output,'jdfz.out');rewrite(output);
readln(a,b,c);
if ((a>b+c)or(b>a+c)or(c>a+b))or((a+b+c) mod 2=1) then writeln('Impossible')
else
  begin
  for i:=0 to a do
    if i>b then break
    else
      begin
      c1:=(a-i)+(b-i);
      if c=c1 then
        begin
        writeln(i,' ',b-i,' ',a-i);
        break;
        end;
      end;
  end;
close(input);close(output);
end.

program z1;
var a,b,c,a1,b1,c1,n,v12,v23,v13,i,ai,bi,ci,j,d,e,f:longint;
Z:array[1..3,1..2] of longint;
begin
{assign(input,'d:\FPC\input.txt');
reset(input);
assign(output,'d:\FPC\output.txt');
rewrite(output);}
read(a,b,c);
if (a+b<c) or (a+c<b) or (b+c<a) then begin write('Impossible'); exit; end;

for i:=0 to a do
begin
a1:=a;
b1:=b;
a1:=a1-i;
b1:=b1-i;
if a1+b1=c then
begin v12:=i; v23:=c-a1; v13:=c-b1; write(v12,' ',v23,' ',v13); exit; end;
end;

write('Impossible');
end.

{$APPTYPE CONSOLE}

uses
  SysUtils,math;
  const in_file='input.txt';
  const out_file='output.txt';
  var
  i,j,n,m,k,ans,a,b,c,a1,b1,p1,p2,p3:longint;

begin
//assign(input,in_file); reset(input);
//assign(output,out_file); rewrite(output);
 readln(a,b,c);
  if ((a+b)=c) then begin writeln(0,' ',b,' ',a); readln; halt; end;
 for i:=1 to a do
 begin
 p1:=i;
 a1:=a-i;
 b1:=b-i;
 p2:=b1;
 p3:=a1;
 if (b1<0) then break;
 if ((a1+b1)=c)and((a1>0)or(b1>0)) then begin writeln(p1,' ',p2,' ',p3); readln; halt; end;
 end;
 writeln('Impossible');
 readln;

//close(output);
//close(input);
end.

program yan;
  var a,b,c,i,j,x,y,a1,b1,c1:longint;
begin
  read(a,b,c); a1:=a; b1:=b; c1:=c;
  if (a>b)and(a>c) then begin x:=a; a:=0; end
    else
      if (b>a)and(b>c) then
        begin x:=b; b:=0; end else begin x:=c; c:=0; end;
  if (x>a+b+c)or((a+b+c-x)mod 2<>0) then write('Impossible')
    else
      begin
        y:=x+((a+b+c-x)div 2);
        write(y-c1,' ',y-a1,' ',y-b1);
      end;
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a,b,c,i:longint;

begin
  read(a,b,c);
  for i:=0 to c do
    if (i + abs(a-i) = a) and (c-i + abs(a-i) = b) then
      begin
        writeln(abs(i-a),' ',c-i,' ',i);
        halt;
      end;
    writeln('Impossible');
end.

var
 a,b,c,i,k1,k2,k3,max,min,min2:integer;
begin
k3:=0;
  readln(a,b,c);
 if a+b>c then begin
   while a+b>c do begin
    a:=a-1;
    b:=b-1;
    inc(k3);
   end;
 end;
 k2:=b;
 k1:=a;
 if (a+b<c) or (a<0) or (b<0) or (c<0) then writeln('Impossible') else write(k3,' ',k2,' ',k1);
end.

program Project_B;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c, x: integer;
begin
  readln(a, b, c);
  if ((a > b + c) or (b > a + b) or (c > a + b)) then
  begin
    writeln('Impossible');
    exit;
  end;
//--------------
  if ((a >= b) and (a >= c)) then
  begin
    if ((odd(a) and (not odd(b+c))) or ((not odd(a)) and (odd(b+c)))) then
    begin
      writeln('Impossible');
      exit;
    end;
    x := (b + c - a) div 2;
    if ((b - x < 0) or (c - x < 0) or (x < 0)) then
    begin
      writeln('Impossible');
      exit;
    end;
    writeln(b - x,' ',x,' ',c - x);
    readln;
    exit;
  end;
//--------------
  if ((b >= a) and (b >= c)) then
  begin
    if ((odd(b) and (not odd(a+c))) or ((not odd(b)) and (odd(a+c)))) then
    begin
      writeln('Impossible');
      exit;
    end;
    x := (a + c - b) div 2;
    if ((a - x < 0) or (c - x < 0) or (x < 0)) then
    begin
      writeln('Impossible');
      exit;
    end;
    writeln(a - x,' ',c - x,' ',x);
    readln;
    exit;
  end;
//--------------
if ((c >= a) and (c >= a)) then
  begin
    if ((odd(c) and (not odd(a+b))) or ((not odd(c)) and (odd(a+b)))) then
    begin
      writeln('Impossible');
      exit;
    end;
    x := (a + b - c) div 2;
    if ((a - x < 0) or (b - x < 0) or (x < 0)) then
    begin
      writeln('Impossible');
      exit;
    end;
    writeln(x,' ',b - x,' ',a-x);
    readln;
    exit;
  end;
//--------------
end.

var
 a,b,c,maxa,maxb,maxc,nmaxa,nmaxb,nmaxc,i,j,x,y,pr1,pr2,pr3,p,max:longint;
 numb,res:array[1..3] of longint;
begin
 readln(a,b,c);
 p:=3;
 max:=c;
 if b>max then begin max:=b;  p:=2; end;
 if a>max then begin max:=a; p:=1; end;
 if p=3 then
   if a<b then
    begin
     if ((a-b+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-b+c) div 2;
     res[3]:=pr1;
     res[2]:=c-pr1;
     res[1]:=b-res[2];
    end else
    begin
     if ((b-a+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-a+c) div 2;
     res[2]:=pr1;
     res[3]:=c-pr1;
     res[1]:=a-res[3];
    end;
  if p=2 then
   if a<c then
    begin
    if ((a-c+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-c+b) div 2;
     res[1]:=pr1;
     res[2]:=b-pr1;
     res[3]:=c-res[2];
    end else
    begin
     if ((c-a+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-a+b) div 2;
     res[2]:=pr1;
     res[1]:=b-pr1;
     res[3]:=a-res[1];
    end;
  if p=1 then
   if b<c then
    begin
     if ((b-c+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-c+a) div 2;
     res[1]:=pr1;
     res[3]:=a-pr1;
     res[2]:=c-res[3];
    end else
    begin
     if ((c-b+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-b+a) div 2;
     res[3]:=pr1;
     res[1]:=a-pr1;
     res[2]:=c-res[3];
    end;
  if (res[3]+res[1]<>a)or(res[1]+res[2]<>b)or(res[2]+res[3]<>c) then  begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  if res[i]<0 then begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  write(res[i],' ');
 end.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
 var a,b,c,x,y,z,a2,b2,c2: integer;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  Readln(x,y,z);
  a2:=x+y-z;
  b2:=z-x+y;
  c2:=x-y+z;

  if  (a2>=0)and(b2>=0)and(c2>=0)and(not(Odd(a2)))and(not(Odd(c2)))and(not(Odd(c2)))
  then
    begin
       Writeln(a2 div 2,' ', b2 div 2,' ', c2 div 2)
    end
  else
    Writeln('Impossible');

end.

uses math;
var f1:text;a,b,c,x,y,z:longint;
begin
        assign(f1,'');reset(f1);
        read(f1,a,b,c);
        x:=(a+b-c)div 2;
        y:=b-x;
        z:=a-x;
        if ((x>=0)and(y>=0)and(z>=0))and((x+y=b)and(y+z=c)and(x+z=a)) then write(x,' ',y,' ',z) else
        write('Impossible');
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
 var
   a,b,c:longint;
   max,st,j,min,i,fir,sec:LongInt;
   num:array[1..5] of longint;
   ans,pos:array[1..5] of LongInt; found:boolean;
    mat:array[1..3,1..3] of LongInt;
begin
  Readln(a,b,c);
  num[1]:=a; num[2]:=b; num[3]:=c; pos[1]:=1; pos[2]:=2; pos[3]:=3;
  begin
  for i:=1 to 2 do
    for j:=i+1 to 3 do
    if num[j]>num[i] then
      begin
        st:=num[j];
        num[j]:=num[i];
        num[i]:=st;
        st:=pos[j];
        pos[j]:=pos[i];
        pos[i]:=st;
      end;
  end;
  for i:=1 to num[3] do
  begin
    if (num[1]-i)=(num[2]-num[3]+i) then
    begin
      min:=i;
      found:=True;
      Break;
    end;
  end;
  if found=False then
  begin
    writeln('Impossible');
    exit;
  end;
  for i:=1 to 3 do
  begin
    mat[pos[1]][pos[3]]:=min;
    mat[pos[2]][pos[3]]:=num[3]-min;
    mat[pos[1]][pos[2]]:=num[1]-min;
  end;
  if mat[1][2]<> 0 then write(mat[1][2],' ') else Write(mat[2][1],' ');
  if mat[2][3]<> 0 then write(mat[2][3],' ') else Write(mat[3][2],' ');
  if mat[3][1]<> 0 then write(mat[3][1]) else Write(mat[1][3]);
  //Writeln;
  {for i:=1 to 3 do
  begin
  for j:=1 to 3 do
  write(mat[i][j], ' ');
  writeln;
  end;}
end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if (j+k+l = i) then
  if (l>=0) then
  if (k>=0) then
  if (j>=0) then
  writeln(l,' ',j,' ',k) else writeln('Impossible') else writeln('Impossible')
  else writeln('Impossible') else writeln('Impossible')
end.

uses
   math;
var
   i,a,b,c:longint;
   arr:array[1..3,1..3] of longint;
begin
   readln(a,b,c);
   for i:=0 to a do
   begin
      arr[1][2]:=i;
      arr[1][3]:=a-i;
      arr[2][1]:=i;
      if b-i>=0 then
      begin
         arr[2][3]:=b-i;
         arr[3][1]:=a-i;
         arr[3][2]:=b-i;
         if a+b-2*i=c then
         begin
            writeln(arr[1,2],' ',arr[2,3],' ',arr[3,1]);
            halt;
         end;
      end;
   end;
   writeln('Impossible');
end.

var x1,x2,x3,l,p,k,i,z:longint;
    a:array[1..4] of longint;
begin
  read ( a[1], a[2] , a[3] );
  x1:= (a[3] - a[1] + a[2] ) div 2;
  x2:=a[3] - x1;
  x3:=a[2] - x1;

  l:=x1+x2;
  k:=x1+x3;
  p:=x3+x2;

  if (x1<0) or (x2<0) or (x3<0)then
  begin
    write('Impossible');
    halt;
  end;

  if l=0 then inc(z);
  if k=0 then inc(z);
  if p=0 then inc(z);

  if z>1 then
  begin
    write ('Impossible');
    halt;
  end;
  if ( l >= 0) then
  begin
   if l = a[1]  then a[1]:=-1000000
               else
   if l=a[2] then a[2]:=-1000000
            else
   if l=a[3] then a[3]:=-1000000;
  end
            else
    begin
      write('Impossible');
      halt;
    end;
if ( k >= 0) then
  begin
   if k = a[1]  then a[1]:=-1000000
               else
   if k=a[2] then a[2]:=-1000000
             else
   if k=a[3] then a[3]:=-1000000;
  end
            else
    begin
      write('Impossible');
      halt;
    end;
if ( p >= 0) then
  begin
   if p = a[1]  then a[1]:=-1000000
                else
   if p=a[2] then a[2]:=-1000000
              else
   if p=a[3] then a[3]:=-1000000;
  end
            else
    begin
      write('Impossible');
      halt;
    end;
 for i:=1 to 3 do
 if a[i] <> -1000000 then
 begin
   write('Impossible');
   halt;
 end;
 write (x3,' ',x2,' ',x1);
end.

var a,b,c:int64;
    i:longint;
begin
  {$ifndef ONLINE_JUDGE}
  assign(input,'input.txt');reset(input);
    assign(output,'output.txt');rewrite(output);
  {$endif}
  readln(a,b,c);
  for i:=0 to a do
    if(i<=b)and(c-a+i=b-i) then begin writeln(i,' ',b-i,' ',c-a+i); exit; end;
  writeln('Impossible');
end.

Uses Math;
Var a,b,c,i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Max (a,b)-1 do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

var
 a,b,c,maxa,maxb,maxc,nmaxa,nmaxb,nmaxc,i,j,x,y,pr1,pr2,pr3,p,max:longint;
 numb,res:array[1..3] of longint;
begin
 readln(a,b,c);
 p:=3;
 max:=c;
 if b>max then begin max:=b;  p:=2; end;
 if a>max then begin max:=a; p:=1; end;
 if p=3 then
   if a<b then
    begin
     if ((a-b+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-b+c) div 2;
     res[3]:=pr1;
     res[2]:=c-pr1;
     res[1]:=a-res[3];
    end else
    begin
     if ((b-a+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-a+c) div 2;
     res[2]:=pr1;
     res[3]:=c-pr1;
     res[1]:=a-res[3];
    end;
  if p=2 then
   if a<c then
    begin
    if ((a-c+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-c+b) div 2;
     res[1]:=pr1;
     res[2]:=c-pr1;
     res[3]:=a-res[3];
    end else
    begin
     if ((c-a+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-a+b) div 2;
     res[2]:=pr1;
     res[1]:=c-pr1;
     res[3]:=a-res[3];
    end;
  if p=1 then
   if b<c then
    begin
     if ((b-c+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-c+a) div 2;
     res[1]:=pr1;
     res[3]:=c-pr1;
     res[2]:=a-res[3];
    end else
    begin
     if ((c-b+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-b+a) div 2;
     res[3]:=pr1;
     res[1]:=c-pr1;
     res[2]:=a-res[3];
    end;
 for i:=1 to 3 do
  if res[i]<0 then begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  write(res[i],' ');
 end.

var a:array[1..4] of longint;
    n,i,j,c,a1,a2,a3:longint;
begin
  read(a[1],a[2],a[3]);
  for i:=1 to 2 do
  for j:=i+1 to 3 do
   if a[i]>a[j] then
    begin
      c:=a[i];
      a[i]:=a[j];
      a[j]:=c;
    end;
  for i:=0 to a[1] do
   begin
     a1:=a[1];
     a2:=a[2];
     a3:=a[3];
     dec(a1,i);
     dec(a2,i);
     if (a1<0) or (a2<0) then begin write('Impossible'); exit; end;
     if a1+a2=a3 then
      begin
        write(i,' ',a2,' ',a3-a2);
        exit;
      end;
   end;
   write('Impossible');
end.

var
	a,b,c,t,s12,s23,s31:longint;
procedure oo;
begin
	writeln('Impossible');
	halt;
end;
begin
	readln(a,b,c);
	if (a<b) and (a<c) then
		begin
		if b<c then
			begin
			s12:=a;
			s23:=b-a;
			s31:=0;
			t:=c-b+a;
			if odd(t) then oo;
			dec(s12,t>>1);
			inc(s23,t>>1);
			inc(s31,t>>1);
			end
			else
			if c<b then
			begin
			s31:=a;
			s23:=c-a;
			s12:=0;
			t:=b-c+a;
			if odd(t) then oo;
			dec(s31,t>>1);
			inc(s23,t>>1);
			inc(s12,t>>1);
			end
			else oo;
		end
		else
		if (b<a) and (b<c) then
		begin
			if a<c then
			begin
			s12:=b;
			s31:=a-b;
			s23:=0;
			t:=c-a+b;
			if odd(t) then oo;
			dec(s12,t>>1);
			inc(s23,t>>1);
			inc(s31,t>>1);
			end
			else
			if c<a then
			begin
			s23:=b;
			s31:=c-b;
			s12:=0;
			t:=a-c+b;
			if odd(t) then oo;
			dec(s23,t>>1);
			inc(s31,t>>1);
			inc(s12,t>>1);
			end
			else oo;
		end
		else
		if (c<a) and (c<b) then
		begin
			if a<b then
			begin
			s31:=c;
			s12:=a-c;
			s23:=0;
			t:=b-a+c;
			if odd(t) then oo;
			dec(s31,t>>1);
			inc(s12,t>>1);
			inc(s23,t>>1);
			end
			else
			if b<a then
			begin
			s23:=c;
			s12:=b-c;
			s31:=0;
			t:=a-b+c;
			if odd(t) then oo;
			dec(s23,t>>1);
			inc(s12,t>>1);
			inc(s31,t>>1);
			end
			else oo;
		end
		else
		begin
			if a+b=c then
				begin
				s12:=0;s23:=b;s31:=a;
				end
				else
				if a+c=b then
				begin
				s12:=a;s23:=c;s31:=0;
				end
				else
				if b+c=a then
				begin
				s12:=b;s23:=0;s31:=c;
				end
				else
				if (a=b) and (b=c) and (not odd(a)) then
				begin
					s12:=a>>1;s23:=a>>1;s31:=a>>1;
				end
				else
				oo;
		end;
	writeln(s12,' ',s23,' ',s31);
end.

// hello
var
 z,y,x,i,a,b,c,y1:longint;

Procedure Print;
begin
 Write(x,' ',y,' ',z);
 Halt;
end;

begin
 Read(a,b,c);
 if (a+b-c) mod 2 = 1 then begin Write('Impossible');Halt end;
 x:=a+b-c;
 y:=b-x;
 z:=c-y;
 Print;
end.

{$MODE OBJFPC}
var
  a, id : array[1..3] of integer;
  cs : array[1..3, 1..3] of integer;
  i, tmp, j : integer;
begin
  fillchar(cs, sizeof(Cs), 0);

  for i := 1 to 3 do
    begin
      read(a[i]);

      id[i] := i;
    end;

  for i := 1 to 3 do
    for j := 1 to 2 do
      if a[j] < a[j + 1] then
        begin
          tmp := a[j];
          a[j] := a[j + 1];
          a[j + 1] := tmp;
          tmp := id[j];
          id[j] := id[j + 1];
          id[j + 1] := tmp;
        end;

  if a[1] mod 2 = 0 then
    begin
      cs[id[1], id[2]] := a[1] div 2;
      cs[id[1], id[3]] := a[1] div 2;
      cs[id[2], id[1]] := a[1] div 2;
      cs[id[3], id[1]] := a[1] div 2;
      dec(a[2], a[1] div 2);
      dec(a[3], a[1] div 2);
    end
  else
    begin
      cs[id[1], id[2]] := a[1] div 2 + 1;
      cs[id[1], id[3]] := a[1] div 2;
      cs[id[2], id[1]] := a[1] div 2 + 1;
      cs[id[3], id[1]] := a[1] div 2;
      dec(a[2], a[1] div 2 + 1);
      dec(a[3], a[1] div 2);
    end;
  a[1] := 0;
  if (a[2] < 0) or (a[3] < 0) then
    begin
      writeln('Impossible');
      halt;
    end;

  cs[id[2], id[3]] := a[2];
  cs[id[3], id[2]] := a[2];
  dec(a[3], a[2]);
  if a[3] < 0 then
    begin
      writeln('Impossible');
      halt;
    end;

  if (a[1] < 0) or (a[2] < 0) or (a[3] < 0) then
    begin
      writeln('Impossible');
      halt;
    end;
  writeln(cs[1, 2],' ',cs[2, 3],' ',cs[3, 1]);
end.

uses math;
var f1:text;a,b,c,x,y,z:longint;
begin
        assign(f1,'');reset(f1);
        read(f1,a,b,c);
        x:=(a+b-c)div 2;
        y:=b-x;
        z:=a-x;
        if ((x>=0)or(y>=0)or(z>=0))and((x+y=b)and(y+z=c)and(x+z=a)) then write(x,' ',y,' ',z) else
        write('Impossible');
end.

program zzz;
 var a,b,c:longint;

 begin

 read(a,b,c);

 if (a<=(b+c)) and (b<=(a+c)) and (c<=(a+b)) and ((a+b+c) mod 2=0)
 then write((b+a-c) div 2,' ',(c+a-b) div 2,' ',(b+c-a) div 2)
 else write('Impossible')

 end.

var
 a,b,c,maxa,maxb,maxc,nmaxa,nmaxb,nmaxc,i,j,x,y,pr1,pr2,pr3,p,max:longint;
 numb,res:array[1..3] of longint;
begin
 readln(a,b,c);
 p:=3;
 max:=c;
 if b>max then begin max:=b;  p:=2; end;
 if a>max then begin max:=a; p:=1; end;
 if p=3 then
   if a<b then
    begin
     pr1:=(a-b+c) div 2;
     res[3]:=pr1;
     res[2]:=c-pr1;
     res[1]:=a-res[3];
    end else
    begin
     pr1:=(b-a+c) div 2;
     res[2]:=pr1;
     res[3]:=c-pr1;
     res[1]:=a-res[3];
    end;
  if p=2 then
   if a<c then
    begin
     pr1:=(a-c+b) div 2;
     res[1]:=pr1;
     res[2]:=c-pr1;
     res[3]:=a-res[3];
    end else
    begin
     pr1:=(c-a+b) div 2;
     res[2]:=pr1;
     res[1]:=c-pr1;
     res[3]:=a-res[3];
    end;
  if p=1 then
   if b<c then
    begin
     pr1:=(b-c+a) div 2;
     res[1]:=pr1;
     res[3]:=c-pr1;
     res[2]:=a-res[3];
    end else
    begin
     pr1:=(c-b+a) div 2;
     res[3]:=pr1;
     res[1]:=c-pr1;
     res[2]:=a-res[3];
    end;
 for i:=1 to 3 do
  if res[i]<0 then begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  write(res[i],' ');
 end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if (j+k+l = i) then
  if (l>0) then
  if (k>0) then
  if (j>0) then
  writeln(l,' ',j,' ',k) else writeln('impossible');
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x,y:array[1..4] of integer;
    max,s,i,z: integer;
begin
  readln(x[1],x[2],x[3]);
  x[4]:=x[1];
  if x[1]>x[2] then max:=1 else max:=2;
  if x[3]>max then max:=3;
  s:=0;
  for i:=1 to 3 do
    if i<>max then s:=s+x[i];
  z:=s-x[max];
  if (z<0)or(z mod 2<>0) then writeln('Impossible')
    else begin
      z:=z div 2;
      y[max]:=x[max+1]-z;
      i:=(max+2) mod 3;
      if i=0 then i:=3;
      y[i]:=x[i]-z;
      i:=(max+1) mod 3;
      if i=0 then i:=3;
      y[i]:=z;
      writeln(y[1],' ',y[2],' ',y[3]);
    end;
end.

var
     a,b,c:array [1..3] of Longint;
     ans:array [1..3,1..3] of Longint;
     AA,BB,CC,x,y,i,j,M,Z:Longint;
     F:Boolean;
begin
     Readln(AA,BB,CC);
     a[1]:=AA;
     b[1]:=1;
     a[2]:=BB;
     b[2]:=2;
     a[3]:=CC;
     b[3]:=3;
     for i:=1 to 2 do
     for j:=i+1 to 3 do
     if a[i]>a[j] then begin
                            M:=a[i];
                            Z:=b[i];
                            a[i]:=a[j];
                            b[i]:=b[j];
                            a[j]:=M;
                            b[j]:=Z;
                       end;
     x:=a[3] div 2;
     y:=a[3]-x-1;
     Inc(x);
     F:=False;
     while (x>=0) and (Y<=a[3]) do
begin
     Inc(y);
     Dec(x);
     z:=a[2]-y;
     if (x+z=a[1]) and (y+z=a[2]) then begin
                                            F:=True;
                                            Break;
                                        end;
 end;
     ans[b[1],b[3]]:=y;
     ans[b[3],b[1]]:=y;
     ans[b[1],b[2]]:=z;
     ans[b[2],b[1]]:=z;
     ans[b[2],b[3]]:=x;
     ans[b[3],b[2]]:=x;
     if (x<0) or (y<0) or (z<0) then F:=False;
     if F then Writeln(ans[1,2],' ',ans[1,3],' ',ans[2,3])
          else Writeln('Impossible');
 end.

{$MODE OBJFPC}
var
  a, id : array[1..3] of integer;
  cs : array[1..3, 1..3] of integer;
  i, tmp, j : integer;
begin
  fillchar(cs, sizeof(Cs), 0);

  for i := 1 to 3 do
    begin
      read(a[i]);

      id[i] := i;
    end;

  for i := 1 to 3 do
    for j := 1 to 2 do
      if a[j] < a[j + 1] then
        begin
          tmp := a[j];
          a[j] := a[j + 1];
          a[j + 1] := tmp;
          tmp := id[j];
          id[j] := id[j + 1];
          id[j + 1] := tmp;
        end;

  if a[1] mod 2 = 0 then
    begin
      cs[id[1], id[2]] := a[1] div 2;
      cs[id[1], id[3]] := a[1] div 2;
      cs[id[2], id[1]] := a[1] div 2;
      cs[id[3], id[1]] := a[1] div 2;
      dec(a[2], a[1] div 2);
      dec(a[3], a[1] div 2);
    end
  else
    begin
      cs[id[1], id[2]] := a[1] div 2 + 1;
      cs[id[1], id[3]] := a[1] div 2;
      cs[id[2], id[1]] := a[1] div 2 + 1;
      cs[id[3], id[1]] := a[1] div 2;
      dec(a[2], a[1] div 2 + 1);
      dec(a[3], a[1] div 2);
    end;

  if (a[2] < 0) or (a[3] < 0) then
    begin
      writeln('Impossible');
      halt;
    end;

  cs[id[2], id[3]] := a[2];
  cs[id[3], id[2]] := a[2];
  dec(a[3], a[2]);
  if a[3] < 0 then
    begin
      writeln('Impossible');
      halt;
    end;

  writeln(cs[1, 2],' ',cs[2, 3],' ',cs[3, 1]);
end.

var a,b,c,i:longint;
begin
  read(a,b,c);
  for i:=0to a do
    begin
      if(b-i<=0)or(c-b+i<=0)then break;
      if c-b+i+i=a then
        begin
          write(i,' ',b-i,' ',c-b+i);
          halt;
        end;
    end;
  write('Impossible')
end.

const ou='Impossible';
var f1,f2:text;a,b,c,x,y,z:longint;s:string;
procedure rd;
begin
        assign(f1,'');reset(f1);
        assign(f2,'');rewrite(f2);
        readln(f1,a,b,c);
        close(f1);
end;
procedure wk;
begin
        if (a+b+c) mod 2<>0 then begin s:=ou;exit;end else
        begin
                if ((a-b+c)div 2)>=0 then z:=(a-b+c)div 2 else begin s:=ou;exit;end;
                if (c-z)>=0 then y:=c-z else begin s:=ou;exit;end;
                if (c-b)>=0 then x:=c-b else begin s:=ou;exit;end;
        end;
end;
procedure et;
begin
        if s='' then write(f2,x,' ',y,' ',z) else write(f2,s);
        close(f2);
end;
begin
        rd;
        wk;
        et;
end.

program prog;

{$APPTYPE CONSOLE}

uses SysUtils,  Math;

var a, b, c, x, y, z, s: integer;

begin
 // reset(input, 'input.txt');
 // rewrite(output, 'output.txt');
  read(a, b, c);
  s:= a + b + c;
  if s mod 2 = 1 then write('Impossible') else begin
    s:= s div 2;
    x:= s - c;
    y:= s - a;
    z:= s - b;
    write(x, ' ', y, ' ', z);
  end;

  //close(input);
  //close(output);
end.

var
bol:boolean;
i,x,j,q:longint;
a,b:Array[-10..100]of longint;
begin
for i:=1 to 3 do begin
    read(A[i]);
    b[i]:=i;
end;
for i:=1 to 2 do
for j:=i+1 to 3 do
if a[i]>a[j] then begin
    x:=a[i];
    a[i]:=a[j];
    a[j]:=x;

     x:=a[i];
    b[i]:=b[j];
    b[j]:=x;
end;
if a[1]+a[2]<a[3] then writeln('Impossible')
else begin
    for i:=0 to a[3] do begin
        q:=a[3]-i;
        if (a[1]-i>=0)and(a[2]-q>=0)and(a[1]-i=a[2]-q) then begin
           bol:=true;
              if b[3]=1 then begin
                   if b[1]=2 then begin
                      write(i,' ',a[1]-i,' ',q);
                   end
                   else begin
                        write(q,' ',a[1]-i,' ',i);
                   end;
               end
               else
               if b[3]=2 then begin
                  if b[1]=1 then
                  write(a[1]-i,' ',q,' ',a[2]-q)
                  else
                  write(q,' ',i,' ',a[1]-i);
               end
               else
               if b[3]=3 then begin
                  if b[1]=1 then write(a[1]-i,' ',q,' ',i)
                  else
                  write(a[1]-i,' ',i,' ',q);
               end;
            end;
        end;
        if bol=false then writeln('Impossible');
    end;
//end;
end.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  i,j,n,m,k:Integer;
  g,h,r:Int64;
  a,b,c,d:Char;
begin
  Readln(n,m,k);
  if (n>m+k) or (m>n+k) or (k>n+m) then
  begin
    write('Impossible');
    Exit;
  end;
  for i:=0 to n do
    if (n-i+(m-i)=k) then
    begin
      write(i,' ',m-i,' ',n-i);
      Readln;
      Exit;
    end;
  Readln;
  Readln;
end.

program yan;
  var a,b,c,i,j,x,y,a1,b1,c1:longint;
begin
  read(a,b,c); a1:=a; b1:=b; c1:=c;
  if (a>b)and(a>c) then begin x:=a; a:=0; end
    else
      if (b>a)and(b>c) then
        begin x:=b; b:=0; end else begin x:=c; c:=0; end;
  if (x>a+b+c)or((a1=b1)and(b1=c1)and(b1 mod 2<>0)) then write('Impossible')
    else
      begin
        y:=x+((a+b+c-x)div 2);
        write(y-c1,' ',y-a1,' ',y-b1);
      end;
end.

program zzz;
 var a,b,c:longint;

 begin

 read(a,b,c);

 if (a<=(b+c)) and (b<=(a+c)) and (c<=(a+b)) and ((a+b+c) mod 2=0)
 then write((b+c-a) div 2,' ',(c+a-b) div 2,' ',(b+a-c) div 2)
 else write('Impossible')

 end.

program p;
var a1,a2,a3,x1,x2,x3:integer;
begin
readln(a1,a2,a3);
x1:=(a1+a2-a3) div 2;
x2:=(a2+a3-a1) div 2;
x3:=(a3+a1-a2) div 2;
if ((x1<0) or (x2<0) or (x3<0)) or ((x1+x2=0)or(x1+x3=0)or(x2+x3=0)) then
writeln('Impossible')
else
writeln(x1,' ',x2,' ',x3);
end.

VAR A1,A2,A3,S,X12,X23,X31:LONGINT;
BEGIN
    READLN(A1,A2,A3);
    IF A1+A2+A3 MOD 2=1 THEN WRITE('Impossible')
    ELSE
        BEGIN
            S:=(A1+A2+A3) DIV 2;
            X12:=S-A3;X23:=S-A1;X31:=S-A2;
            IF (X12<0)OR(X23<0)OR(X31<0) THEN WRITE('Impossible')
            ELSE WRITELN(X12,' ',X23,' ',X31);
        END;
END.

var
a,b,c,x,y,z:longint;
begin
   readln(a,b,c);
   x:= (a+b-c)div 2;
   y:=b-x;
   z:=c-y;
   if (x <0) or (y<0) or (z<0) or ((a+b-c) mod 2 =1) or (x+y=0) or (x+z=0) or (y+z=0) then
     writeln('Impossible')
   else
     writeln(x,' ',y,' ',z);
end.

var a,b,c, max, ans, x,y,z: LongInt;
begin
  Readln(a,b,c);
  if (a>b+c) or (b>a+c) or (c>a+b) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  if a>b then
  begin
    max:=a;
    ans:=b+c;
  end
     else
  begin
    max:=b;
    ans:=a+c;
  end;

  if c>max then
  begin
    max:=c;
    ans:=a+b;
  end;

  x:=(ans-max) div 2 + max - c;
  y:=(ans-max) div 2 + max - a;
  z:=(ans-max) div 2 + max - b;

  if (x<0) or (y<0) or (z<0) or ((x=0) and (y=0)) or ((y=0) and (z=0)) or ((z=0) and (x=0)) or ((x=0) and (y=0) and (z=0)) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  Writeln(x,' ',y,' ',z);
end.

var a,b,c:int64;
    i:longint;
begin
  {$ifndef ONLINE_JUDGE}
  assign(input,'input.txt');reset(input);
    assign(output,'output.txt');rewrite(output);
  {$endif}
  readln(a,b,c);
  for i:=0 to a do
    if(i<=b)and(c-a+i=b-i) then begin writeln(i,' ',b-i,' ',c-a+i); exit; end;
  writeln('Impossible');
end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  writeln(i);
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if j+k+l = i then
  writeln(j,' ',k,' ',l) else writeln('impossible');
end.

var
 n,m,k,l,w,s,j,a,b,c,a1,b1,c1,p1,p2,p3,i:longint;
begin
 readln(a,b,c);
 if (a+b+c)mod 2<>0 then begin writeln('Impossible'); halt; end;
 for i:=0 to 1000000 do
 begin
  if (i>a)or(i>b) then break;
  a1:=i;
  c1:=a-a1;
  if c1>c then break;
  b1:=c-c1;
  if b1+a1=b then begin writeln(a1,' ',b1,' ',c1); halt; end;
 end;
 writeln('Impossible');
end.

var
  a,b:array[1..3] of longint;
  x,i,j,x1,x2,x3:longint;

begin
  for i:=1 to 3 do begin read(a[i]); b[i]:=i; end;
  if (a[1]+a[2]+a[3]) mod 2<>0 then begin writeln('Impossible'); exit; end;
  for i:=1 to 3 do for j:=i+1 to 3 do
    if (a[i]>a[j]) then
    begin
      x:=a[i]; a[i]:=a[j]; a[j]:=x;
      x:=b[i]; b[i]:=b[j]; b[j]:=x;
    end;
  if (a[3]>a[1]+a[2]) then begin writeln('Impossible'); exit; end;
  x1:=-(a[3]-a[1]-a[2]) div 2;
  x2:=a[2]-x1;
  x3:=a[1]-x1;
  if (b[1]=1) and (b[2]=2) then writeln(x1,' ',x2,' ',x3);
  if (b[1]=1) and (b[2]=3) then writeln(x3,' ',x2,' ',x1);
  if (b[1]=2) and (b[2]=1) then writeln(x1,' ',x3,' ',x2);
  if (b[1]=2) and (b[2]=3) then writeln(x2,' ',x3,' ',x1);
  if (b[1]=3) and (b[2]=1) then writeln(x3,' ',x1,' ',x2);
  if (b[1]=3) and (b[2]=2) then writeln(x2,' ',x1,' ',x3);
end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if (j+k+l = i) or (l<0) or (k<0) or (l<0) then
  writeln(l,' ',j,' ',k) else writeln('impossible');
end.

var a,b,c,i:longint;
begin
  read(a,b,c);
  for i:=0to a do
    begin
      if(b-i<=0)or(c-b+i<=0)then break;
      if c-b+i+i=a then
        begin
          write(i,' ',b-i,' ',c-b+i);
          halt;
        end;
    end;
  write('Impossible')
end.

var
 a,b,c,i,k1,k2,k3,max,min,min2,l:integer;
begin
  readln(a,b,c);
  l:=0;
  if (a>b) and (a>c) then begin
  max:=a;
  min:=b;
  min2:=c;
  end
  else begin
  max:=b;
  min:=a;
  min2:=c;
  end;
  if (c>b) and (c>a) then begin
  max:=c;
  min:=b;
  min2:=a;
 end;
 if min+min2>=max then begin
   while min+min2>=max do begin
     if min+min2=max then begin
       k1:=min;
       k2:=min2;
       break;
     end;
     min:=min-1;
     min2:=min2-1;
     inc(k3);
   end;
 if min+min2<max then begin
   writeln('Impossible');
   inc(l);
 end;
 if l<1 then write(k3,' ',k1,' ',k2);
 end else writeln('Impossible');
end.

var
  a,b,c,ans1,ans2,ans3 : int64;
  i : longint;
  procedure lol(a,b,c : int64);
  begin
    writeln(a,' ',b,' ',c);
    halt;
  end;
begin
  readln(a,b,c);
  for i:=0 to a do
    if (((b-i)=(c-a+i)) and ((b-i)>=0)) then
      lol(i,b-i,a-i);
end.

Var a,b,c,x,y,z:longint;
  Begin
    Read(a,b,c);
    if (b+c-a)mod 2<>0 then begin Write('Impossible');exit end;
    z:=(b+c-a)div 2;
    x:=a-z;
    y:=b-x;
    if (x<0)or(y<0)then Write('Impossible')
                   else Write(x,' ',y,' ',z)
  End.

// hello
var
 z,y,x,i,a,b,c,y1:longint;

Procedure Print;
begin
 Write(x,' ',y,' ',z);
 Halt;
end;

begin
 Read(a,b,c);
 if (a+b-c) mod 2 = 1 then begin Write('Impossible');Halt end;
 x:=(a+b-c) div 2;
 y:=b-x;
 z:=c-y;
 Print;
end.

program Project_B;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a1, a2, a3, i, x, y: integer;
procedure swap(var x, y: integer);
var
  z: integer;
begin
  z := x;
  x := y;
  y := z;
end;
begin
  readln(a1, a2, a3);
  if ((a1 > a2 + a3) or (a2 > a3 + a1) or (a3 > a2 + a1)) then
  begin
    writeln('Impossible');
    exit;
  end;
  if (a1 > a2) then
    swap(a1, a2);
  if (a2 > a3) then
    swap(a2, a3);
  if (a1 > a2) then
    swap(a1, a2);
  if (odd(a3)) then
  begin
    if (not odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        writeln(x,' ',a2 - x,' ',a1 -x);
        exit;
      end;
    end;
  end
  else
  begin
    if (odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        writeln(x,' ',a2 - x,' ',a1 -x);
        exit;
      end;
    end;
  end;
  readln;
end.

program Project_B;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a1, a2, a3, i, x, y, i1, i2, i3, z1, z2, z3: integer;
procedure swap(var x, y, a, b: integer);
var
  z: integer;
begin
  z := x;
  x := y;
  y := z;
  z := a;
  a := b;
  b := z;
end;
begin
  readln(a1, a2, a3);
  i1 := 1;
  i2 := 2;
  i3 := 3;
  if ((a1 + a2 < a3) or (a1 + a3 < a2) or (a2 + a3 < a1)) then
  begin
    writeln('Impossible');
    exit;
  end;
  if (a1 > a2) then
    swap(a1, a2, i1, i2);
  if (a2 > a3) then
    swap(a2, a3, i2, i3);
  if (a1 > a2) then
    swap(a1, a2, i1, i2);
  if (odd(a3)) then
  begin
    if (not odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        z1 := x;
        z2 := a2 - x;
        z3 := a1 - x;
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        if (i2 > i3) then
          swap(z2, z3, i2, i3);
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        writeln(z1,' ',z2,' ',z3);
        readln;
        exit;
      end;
    end;
  end
  else
  begin
    if (odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        z1 := x;
        z2 := a2 - x;
        z3 := a1 - x;
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        if (i2 > i3) then
          swap(z2, z3, i2, i3);
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        writeln(z1,' ',z2,' ',z3);
        readln;
      end;
    end;
  end;
  readln;
end.

Var a,b,c,x,y,z:longint;
  Begin
    Read(a,b,c);
    if (a+c-b)mod 2<>0 then begin Write('Impossible');exit end;
    z:=(a+c-b)div 2;
    x:=a-z;
    y:=b-x;
    if (x<0)or(y<0)then Write('Impossible')
                   else Write(x,' ',y,' ',z)
  End.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
i:= (a+b+c)div 2;
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if j+k+l = i then
  writeln(l,' ',k,' ',j) else writeln('impossible');
end.

var a, b, c, x, y, z: longint;

Function Solve(a, b, c: longint): boolean;
begin
 if (b<c) and (c-b<=a) and (a<=b+c) and ((a+b-c) mod 2 = 0)
    and ((a-b+c) mod 2 = 0) and ((-a+b+c) mod 2 = 0) then
   begin
    x:= (a+b-c) div 2;
    y:= (a-b+c) div 2;
    z:= (-a+b+c) div 2;
   end
  else if (b>c) and (b-c<=a) and (a<=b+c) and ((a+b-c) mod 2 = 0)
          and ((a-b+c) mod 2 = 0) and ((-a+b+c) mod 2 = 0) then
   begin
    x:= (a+b-c) div 2;
    y:= (a-b+c) div 2;
    z:= (-a+b+c) div 2;
   end
  else if (b = c) and (a<=2*c) and (a mod 2 = 0) then
   begin
    x:= a div 2;
    y:= a div 2;
    z:= c - a div 2;
   end
  else
   begin
    exit(False);
   end;
 Solve:= True;
end;

begin
 read(a,b,c);

 if Solve(a,b,c) then
  write(x,' ',y,' ',z)
 else if Solve(a,c,b) then
  write(x,' ',y,' ',z)
 else if Solve(b,a,c) then
  write(x,' ',y,' ',z)
 else if Solve(b,c,a) then
  write(x,' ',y,' ',z)
 else if Solve(c,a,b) then
  write(x,' ',y,' ',z)
 else if Solve(c,b,a) then
  write(x,' ',y,' ',z)
 else
  write('Impossible');

end.

var a,b,c, max, ans, x,y,z: LongInt;
begin
  Readln(a,b,c);
  if (a=0) or (b=0) or (c=0) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  if a>b then
  begin
    max:=a;
    ans:=b+c;
  end
     else
  begin
    max:=b;
    ans:=a+c;
  end;

  if c>max then
  begin
    max:=c;
    ans:=a+b;
  end;

  x:=(ans-max) div 2 + max - c;
  y:=(ans-max) div 2 + max - a;
  z:=(ans-max) div 2 + max - b;

  if (((ans-max) div 2) <= 0) or (x<0) or (y<0) or (z<0) or (x=0) and (y=0) or (y=0) and (z=0) or (z=0) and (x=0) or (x=0) and (y=0) and (z=0) then
  begin
    Writeln('Impossible');
    halt(0);
  end;

  Writeln(x,' ',y,' ',z);
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c, k, v1, v2, v3: integer;
  //a: array of integer;
  flag : boolean;

begin
  v1 := 0;
  v2 := 0;
  v3 := 0;
  flag := false;
  read (a, b, c);
  readln;
  if ((a+b+c) mod 2 = 0) and (a > 0) and (b > 0) and (c > 0) then
  begin
    k := 0;
    while (a > 1) and (b > 1) and (c > 1) and (a < b+c-2) and (b < a+c-2) and (c < a+b-2) do
    begin
      k := k+1;
      a := a-2;
      b := b-2;
      c := c-2;
    end;
    if (a = b+c) then
    begin
      v1 := b + k;
      v2 := k;
      v3 := c + k;
      flag := true;
    end
    else if (b = a+c) then
    begin
      v1 := a + k;
      v2 := c + k;
      v3 := k;
      flag := true;
    end
    else if (c = a+b) then
    begin
      v1 := k;
      v2 := b + k;
      v3 := a + k;
      flag := true;
    end;
  end;
  if (flag) then
    writeln (v1, ' ', v2, ' ', v3)
  else
    writeln ('Impossible');
  readln;
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a,b,c,i:longint;

begin
  read(a,b,c);
  for i:=0 to c do
    if abs(i-a) = abs(c-i-b) then
      begin
        writeln(abs(i-a),' ',c-i,' ',i);
        halt;
      end;
    writeln('Impossible');
end.

var
	a,b,c,t,s12,s23,s31:longint;
procedure oo;
begin
	writeln('Impossible');
	halt;
end;
begin
	readln(a,b,c);
	if (a<b) and (a<c) then
		begin
		if b<c then
			begin
			s12:=a;
			s23:=b-a;
			s31:=0;
			t:=c-b+a;
			if odd(t) then oo;
			dec(s12,t>>1);
			inc(s23,t>>1);
			inc(s31,t>>1);
			end
			else
			begin
			s31:=a;
			s23:=c-a;
			s12:=0;
			t:=b-c+a;
			if odd(t) then oo;
			dec(s31,t>>1);
			inc(s23,t>>1);
			inc(s12,t>>1);
			end;
		end
		else
		if (b<a) and (b<c) then
		begin
			if a<c then
			begin
			s12:=b;
			s31:=a-b;
			s23:=0;
			t:=c-a+b;
			if odd(t) then oo;
			dec(s12,t>>1);
			inc(s23,t>>1);
			inc(s31,t>>1);
			end
			else
			begin
			s23:=b;
			s31:=c-b;
			s12:=0;
			t:=a-c+b;
			if odd(t) then oo;
			dec(s23,t>>1);
			inc(s31,t>>1);
			inc(s12,t>>1);
			end;
		end
		else
		if (c<a) and (c<b) then
		begin
			if a<b then
			begin
			s31:=c;
			s12:=a-c;
			s23:=0;
			t:=b-a+c;
			if odd(t) then oo;
			dec(s31,t>>1);
			inc(s12,t>>1);
			inc(s23,t>>1);
			end
			else
			begin
			s23:=c;
			s12:=b-c;
			s31:=0;
			t:=a-b+c;
			if odd(t) then oo;
			dec(s23,t>>1);
			inc(s12,t>>1);
			inc(s31,t>>1);
			end;
		end
		else
		begin
			if a+b=c then
				begin
				s12:=0;s23:=b;s31:=a;
				end
				else
				if a+c=b then
				begin
				s12:=a;s23:=c;s31:=0;
				end
				else
				if b+c=a then
				begin
				s12:=b;s23:=0;s31:=c;
				end
				else
				oo;
		end;
	writeln(s12,' ',s23,' ',s31);
end.

var
 a,b,c,maxa,maxb,maxc,nmaxa,nmaxb,nmaxc,i,j,x,y,pr1,pr2,pr3,p,max:longint;
 numb,res:array[1..3] of longint;
begin
 readln(a,b,c);
 p:=3;
 max:=c;
 if b>max then begin max:=b;  p:=2; end;
 if a>max then begin max:=a; p:=1; end;
 if p=3 then
   if a<b then
    begin
     if ((a-b+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-b+c) div 2;
     res[3]:=pr1;
     res[2]:=c-pr1;
     res[1]:=a-res[3];
    end else
    begin
     if ((b-a+c) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-a+c) div 2;
     res[2]:=pr1;
     res[3]:=c-pr1;
     res[1]:=a-res[3];
    end;
  if p=2 then
   if a<c then
    begin
    if ((a-c+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(a-c+b) div 2;
     res[1]:=pr1;
     res[2]:=b-pr1;
     res[3]:=c-res[3];
    end else
    begin
     if ((c-a+b) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-a+b) div 2;
     res[2]:=pr1;
     res[1]:=b-pr1;
     res[3]:=a-res[3];
    end;
  if p=1 then
   if b<c then
    begin
     if ((b-c+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(b-c+a) div 2;
     res[1]:=pr1;
     res[3]:=a-pr1;
     res[2]:=c-res[3];
    end else
    begin
     if ((c-b+a) mod 2<>0) then begin writeln('Impossible'); exit; end else pr1:=(c-b+a) div 2;
     res[3]:=pr1;
     res[1]:=a-pr1;
     res[2]:=b-res[3];
    end;
  if (res[3]+res[1]<>a)or(res[1]+res[2]<>b)or(res[2]+res[3]<>c) then  begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  if res[i]<0 then begin writeln('Impossible'); exit; end;
 for i:=1 to 3 do
  write(res[i],' ');
 end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if j+k+l = i then
  writeln(l,' ',j,' ',k) else writeln('impossible');
end.

var a,b,c,d,k,l:integer;
begin
read(a,b,c);
d:=a;
k:=0;
l:=l;
if d<b then d:=b;
if d<c then d:=c;
if d=a then begin
                   d:=d-b;
                   if d>c then write('Impossible')
                 else while(d<=c)and(l<1)do   if d>c then write('Impossible')
                                                          else if d=c then begin
                                                                                write(b,' ',k, ' ',c);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       b:=b-1;
                                                                       k:=k+1;
                                                                       c:=c-1;
                                                                       end;
                   end;
if d=b then begin
                   d:=d-a;
                   if d>c then write('Impossible')
                 else while(d<=c)and(l<1)do   if d>c then write('Impossible')
                                                          else if d=c then begin
                                                                                write(a, ' ',c, ' ',k);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       a:=a-1;
                                                                       k:=k+1;
                                                                       c:=c-1;
                                                                       end;
                   end;
if d=c then begin
                   d:=d-a;
                    if d>b then write('Impossible')
                 else while(d<=c)and(l<1)do   if d>b then write('Impossible')
                                                          else if d=b then begin
                                                                                write(k, ' ',b, ' ',a);
                                                                                l:=1;
                                                                                end
                                                                else begin
                                                                       d:=d+1;
                                                                       a:=a-1;
                                                                       k:=k+1;
                                                                       b:=b-1;
                                                                       end;
                   end;
end.

var     s, i, a, b, c, x, y, z : longint;
function kt : boolean;
        begin
          kt := false;
          if x + y + z = s then
                if a = z + x then
                        if b = x + y then
                                if c = y + z then
                                        kt := true;
        end;
begin
        readln(a, b, c);
        s := (a + b + c) div 2;
        for x := 0 to a do
                begin
                  y := b-x;
                  z := a-x;
                  if kt and (y >0) and (z > 0) then
                        begin
                          writeln(x,' ',y,' ',z);
                          halt;
                        end;
                end;
        writeln('Impossible');
end.

const   fi      =       '';
        fo      =       '';
type    int     =       longint;
var     a,b,c   :       int;
        max,sum,min :       int;
        d       :       array[1..3]     of      int;

{}
procedure xl;
var t: int;
begin
        if (sum mod 2=1) or (sum-max<max) then
           begin
                writeln('Impossible');
                exit;
           end;
        if (a=b)and(a=c) then
           begin
                writeln( a div 2, ' ', a div 2,' ',a div 2); exit;
           end;
        if (Sum-max=max) then
            begin
                  if a=b+c then writeln(b,' ',0,' ',c)
                    else if b=a+c then writeln(a,' ',c,' ',0)
                       else write(0,' ',b,' ',a);
                  exit;
            end;
        t := max div 2;
        d[1] := t;    //max-min
        d[2] := max-t;//max-avg
        d[3] := min-t;//min-avg
        if a=max then
          begin
            if b=min then writeln(d[1],' ',d[3],' ',d[2])
               else writeln(d[2],' ',d[3],' ',d[1]); exit;
          end;
        if b=max then
          begin
            if a=min then writeln(d[1],' ',d[2],' ',d[3])
               else writeln(d[2],' ',d[1],' ',d[3]); exit;
          end;
        if c=max then
          begin
            if a=min then writeln(d[3],' ',d[2],' ',d[1])
               else writeln(d[3],' ',d[1],' ',d[2]); exit;
          end;
end;
{}

begin
        assign(input,fi);       reset(input);
        assign(output,fo);      rewrite(output);
        readln(a,b,c);
        max := a; min := a;
        if max<b then max := b; if min>b then min := b;
        if max<c then max := c; if min>c then min := c;
        sum := a+b+c;
        xl;
        close(input);   close(output);
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, n, res, a, b, c: integer;
  s, k: string;

begin
  readln(a, b, c);

  for i := 0 to a do
    if ((b - i) + (a - i) = c)and(b - i > 0)and(a - i > 0) then
      begin
        write(i, ' ', b - i, ' ', a - i);
        halt(0);
      end;

end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c, k, v1, v2, v3: integer;
  //a: array of integer;
  flag : boolean;

begin
  v1 := 0;
  v2 := 0;
  v3 := 0;
  flag := false;
  read (a, b, c);
  readln;
  if ((a+b+c) mod 2 = 0) and (a > 0) and (b > 0) and (c > 0) then
  begin
    k := 0;
    while (a > 1) and (b > 1) and (c > 1) do
    begin
      k := k+1;
      a := a-2;
      b := b-2;
      c := c-2;
    end;
    if (a = b+c) then
    begin
      v1 := b + k;
      v2 := k;
      v3 := c + k;
      flag := true;
    end
    else if (b = a+c) then
    begin
      v1 := a + k;
      v2 := c + k;
      v3 := k;
      flag := true;
    end
    else if (c = a+b) then
    begin
      v1 := k;
      v2 := b + k;
      v3 := a + k;
      flag := true;
    end;
  end;
  if (flag) then
    writeln (v1, ' ', v2, ' ', v3)
  else
    writeln ('Impossible');
  readln;
end.

program Project_B;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a1, a2, a3, i, x, y, i1, i2, i3, z1, z2, z3: integer;
procedure swap(var x, y, a, b: integer);
var
  z: integer;
begin
  z := x;
  x := y;
  y := z;
  z := a;
  a := b;
  b := z;
end;
begin
  readln(a1, a2, a3);
  i1 := 1;
  i2 := 2;
  i3 := 3;
  if (a1 > a2) then
    swap(a1, a2, i1, i2);
  if (a2 > a3) then
    swap(a2, a3, i2, i3);
  if (a1 > a2) then
    swap(a1, a2, i1, i2);
  if (odd(a3)) then
  begin
    if (not odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        z1 := x;
        z2 := a2 - x;
        z3 := a1 - x;
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        if (i2 > i3) then
          swap(z2, z3, i2, i3);
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        writeln(z1,' ',z2,' ',z3);
        readln;
        exit;
      end;
    end;
  end
  else
  begin
    if (odd(a1 + a2)) then
    begin
      writeln('Impossible');
      exit;
    end
    else
    begin
      x := (a1 + a2 - a3) div 2;
      if ((a1 - x < 0) or (a2 - x < 0)) then
      begin
        writeln('Impossible');
        exit;
      end
      else
      begin
        z1 := x;
        z2 := a2 - x;
        z3 := a1 - x;
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        if (i2 > i3) then
          swap(z2, z3, i2, i3);
        if (i1 > i2) then
          swap(z1, z2, i1, i2);
        writeln(z1,' ',z2,' ',z3);
        readln;
      end;
    end;
  end;
  readln;
end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, n, res, a, b, c: integer;
  s, k: string;

begin
  readln(a, b, c);

  for i := 0 to a do
    if ((b - i) + (a - i) = c)and(b - i > 0)and(a - i > 0) then
      begin
        write(i, ' ', b - i, ' ', a - i);
        halt(0);
      end;

  write('Impossible');
end.

VAR  a,b,c,d,x,y,z,m:dword;
BEGIN
readln(a,b,c);
d:=a+b+c;
if d mod 2=0 then begin
  m:=d div 2;
  x:=m-a;
  y:=m-b;
  z:=m-c;
  if (x>=0) and (y>=0) and (z>=0) then writeln(z,' ',x,' ',y)
  else writeln('Impossible');
end else writeln('Impossible');
END.

var
   v1,v2,v3,s12,s23,s31,sum:longint;
   procedure imp;
      begin
         writeln('Impossible');
         exit;
      end;
Begin
   read(v1,v2,v3);
   s12:=0; s23:=0; s31:=0;
   sum:=v1+v2+v3;
   if sum mod 2=1 then imp;
   if v1>v2+v3 then imp;
   if v2>v1+v3 then imp;
   if v3>v1+v2 then imp;
   s12:=(sum-2*v3) div 2;
   s31:=(sum-2*v2) div 2;
   s23:=(sum-2*v1) div 2;
   write(s12,' ',s23,' ',s31)
End.

Uses Math;
Var a,b,c,i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Max (a,b)-1 do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

program ideone;
var a,b,c,d : integer;
begin
    readln(a,b,c);
    d:= (a+b+c) div 2;
    if ((d-c)>=0) and (d-a>=0) and (d-b>=0) and ((a+b+c) mod 2 = 0) then
    writeln(d-c,' ',d-a,' ',d-b) else writeln('Imposible');
end.

// hello
var
 z,y,x,i,a,b,c,y1:longint;

Procedure Print;
begin
 Write(x,' ',y,' ',z);
 Halt;
end;

begin
 Read(a,b,c);
 if (a+b-c) mod 2 = 1 then begin Write('Impossible');Halt end;
 x:=(a+b-c) div 2;
 y:=b-x;
 z:=c-y;
 if (x>=0)and(y>=0)and(z>=0) then
 Write(x,' ',y,' ',z) else Write('Impossible');
end.

// hello
var
 z,y,x,i,a,b,c,y1:longint;

Procedure Print;
begin
 Write(x,' ',y,' ',z);
 Halt;
end;

begin
 Read(a,b,c);
 if (a+b-c) mod 2 = 1 then begin Write('Impossible');Halt end;
 x:=(a+b-c) div 2;
 y:=b-x;
 z:=c-y;
 if ((x>=0)and(y>0)and(z>0))or
    ((x>0)and(y>=0)and(z>0))or
    ((x>0)and(y>0)and(z>=0))then
 Write(x,' ',y,' ',z) else Write('Impossible');
end.

program cf_200_B;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  v,v1,v2,s,v3,s1,s2,s3,t,i,d:LongInt;
begin
  Readln(v1,v2,v3); t:=0;
  v:=v1+v2+v3;
  s:=v div 2;
  if v mod 2  =1 then t:=1;
  if (v1+v2<v3) or (v1+v3<v2) or (v2+v3<v1) then t:=1;
  if t=0 then begin
     d:=v2-v3; if d<0 then d:=-d;
     if v2<v3 then begin
      s1:=(v1-d) div 2;
      s3:=v3-v1;
     end;
     s2:=s- s1-s3;
  end;

    if t=0 then write(s1,' ',s2,' ',s3) else Writeln('Impossible');

end.

Uses Math;
Var a,b,c,i:LongInt;
Begin
    // ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (a,b,c);
     For I:=0 to Min (a,b)-1 do
     If a-i+b-i=c
     then Begin
               Writeln (i,' ',b-i,' ',a-i);
               Halt (0);
          End;
     Writeln ('Impossible');
End.

var a,b,c,i:longint;
begin
  read(a,b,c);
  for i:=0to a do
    if c-b+i+i=a then
      begin
        write(i,' ',b-i,' ',c-b+i);
        halt;
      end;
  write('Impossible')
end.

program p2;
var a,b,c,max:longint;
begin
read(a,b,c);
If a>b then max:=a else max:=b;
If max<c then max:=c;
If 2*max>(a+b+c) then writeln('Impossible') else
write((a+b-c) div 2,' ',(b+c-a) div 2,' ', (c+a-b) div 2);
end.

Var a,b,c,x,y,z:longint;
  Begin
    Read(a,b,c);
    if (a+c-b)mod 2<>0 then begin Write('Impossible');exit end;
    z:=(a+c-b)div 2;
    x:=a-z;
    y:=b-x;
    if (x<0)or(y<0)then Write('Impossible')
                   else Write(x,' ',y,' ',z)
  End.

var a,b,c,z,x,y:longint;
begin
readln(a,b,c);
z:=(b-a+c) div 2;
y:=c-z;
x:=a-y;
if (a=b)and(b=c)and(c=a)and(a mod 2<>0) then begin writeln('Impossible') ;halt;end;
if (x<0)or(y<0)or(z<0) then begin writeln('Impossible');halt;end;

writeln(x,' ',z,' ',y)

end.

program Project1;

{$APPTYPE CONSOLE}

var
  a, b, c, i : integer;

begin
  readln(A, b, c);
  for i := 0 to a do
    if (b - i > 0) and (c - a + i > 0) and (b - i = c - (a - i)) then begin
      writeln(i, ' ', b - i, ' ', a - i);
      readln;
      readln;
      halt(0);
    end;
  writeln('Impossible');
end.

var
     a,b,c:array [1..3] of Longint;
     ans:array [1..3,1..3] of Longint;
     AA,BB,CC,x,y,i,j,M,Z:Longint;
     F:Boolean;
begin
     Readln(AA,BB,CC);
     a[1]:=AA;
     b[1]:=1;
     a[2]:=BB;
     b[2]:=2;
     a[3]:=CC;
     b[3]:=3;
     for i:=1 to 2 do
     for j:=i+1 to 3 do
     if a[i]>a[j] then begin
                            M:=a[i];
                            Z:=b[i];
                            a[i]:=a[j];
                            b[i]:=b[j];
                            a[j]:=M;
                            b[j]:=Z;
                       end;
     x:=a[3] div 2;
     y:=a[3]-x-1;
     Inc(x);
     F:=False;
     while (x>=0) and (Y<=a[3]) do
begin
     Inc(y);
     Dec(x);
     z:=a[2]-y;
     if (x+z=a[1]) and (y+z=a[2]) then begin
                                            F:=True;
                                            Break;
                                        end;
     if (x+z=a[2]) and (y+z=a[1]) then begin
                                            F:=True;
                                            M:=x;
                                            x:=y;
                                            y:=M;
                                            Break;
                                        end;
 end;
     ans[b[1],b[3]]:=x;
     ans[b[3],b[1]]:=x;
     ans[b[1],b[2]]:=z;
     ans[b[2],b[1]]:=z;
     ans[b[2],b[3]]:=y;
     ans[b[3],b[2]]:=y;
     if (x<0) or (y<0) or (z<0) then F:=False;
     if F then Writeln(ans[1,2],' ',ans[1,3],' ',ans[2,3])
          else Writeln('Impossible');
 end.

var a,b,c,g,i,j,k,l : longint;
begin
  readln(a,b,c);
  i:= (a+b+c)div 2;
  writeln(i);
  j:= i-a;
  k:= i-b;
  l:= i-c;
  if j+k+l = i then
  writeln(j,' ',k,' ',l) else writeln('impossible');
end.

var x1,x2,x3,a,b,c:longint;
begin
  read ( a, b , c );
  x1:= (c - a + b ) div 2;
  x2:=c - x1;
  x3:=b - x1;
  if ( x1 >= 0 )  and ( x2 >= 0) and (x3 >= 0 ) then write(x3,' ',x1,' ',x2)
                                               else write('Impossible');
end.

program ideone;
var a,b,c,d : integer;
begin
    readln(a,b,c);
    d:= (a+b+c) div 2;
    if (d>=a) and (d>=b) and (d>=c) then
    writeln(d-c,' ',d-a,' ',d-b) else writeln('Impossible');
end.

// hello
var
 z,y,x,i,a,b,c,y1:longint;

Procedure Print;
begin
 Write(x,' ',y,' ',z);
 Halt;
end;

begin
 Read(a,b,c);
 if (a+b-c) mod 2 = 1 then begin Write('Impossible');Halt end;
 x:=a+b-c;
 y:=b-x;
 z:=c-y;
 Print;
end.

var a,b,c,g,i,j,k : longint;
begin
  readln(a,b,c);
  if a>b then
  if a>c then
  g:=a;
  if b>a then
  if b>c then
  g:=b;
  if c>a then
  if c>b then
  g:=c;
  for i:= 0 to g do
  for j:= 0 to g do
  for k:= 0 to g do
  if i+j = a then
  if j+k = b then
  if k+i = c then
  writeln(j,' ',k,' ',i);
end.