program l;
var
  A, B, C, k, R, E, L, Max, V, I: Longint;
  Found: Boolean;
begin
  while True do
  begin
    Readln(A, B, C, k);
    if k = 0 then Break;
    
    Max:= 1 shl k;
    L:= (Max - 1) div C + 1;
    E:= C - (Max mod C);
    
    if B < A then
    begin
      R:= Max + B - A;
    end else R:= B - A;
    V:= R div C;
    R:= R mod C;
    
    Found:= False;
    for I:= 0 to C - 1 do
    if E * I - R + C mod C = 0 then
    begin
      V:= V + L * I;
      if E * I < R then V:= V + (E*I - R) div C else
      if E* I > R then V:= V - (E* I - R) div C;
      Found:= True;
      Break;
    end;
    if Found then Writeln(V) else Writeln('FOREVER');    
  end;
end.