水のバケツ

xy の容量をもつ 2 つのバケツだけが与えられているとき、これら 2 つのバケツにためる水の合計を、目標値 s にできるだけ近づけたいとします。
操作は最大で k 回まで行え、以下のいずれかを 1 回の操作とみなします:
  • どちらか一方のバケツを満杯になるまで水で満たす
  • どちらか一方のバケツを空にする
  • 一方のバケツの水をもう一方に移す。ただし、移す先が満杯になるか、移す元が空になるかのどちらか早い方で操作を止める
初期状態では、両方のバケツは空です。
もし 2 つのバケツの合計をちょうど s にすることができなくても、なるべく近い値 s' を作りたいと考えます。そのときの差の絶対値 |s - s'| の最小値を求めてください。

入力

入力は 1 行で、4 つの整数 x, y (1 ≤ x, y ≤ 100), k (1 ≤ k ≤ 100), s (1 ≤ s ≤ 200) が与えられます。

出力

最大 k 回の操作を行ったときに得られる、s との差の絶対値の最小値を出力してください。

サンプル

Input
入力
14 50 2 32
18

解説

操作は最大 2 回までなので、2 回の操作で可能な水の合計は以下の通りです:
  1. (0, 0) → 0 単位
  1. (14, 0) → 14 単位
  1. (0, 50) → 50 単位
  1. (0, 14) → 14 単位
  1. (14, 36) → 50 単位
  1. (14, 50) → 64 単位
目標の 32 にもっとも近づけるのは 14 で、そのときの差は 18 となります。
実は (14, 36) の状態から最初のバケツを空にして 36 を得ることも可能ですが、この操作を含めると 3 回必要になるため、最大 2 回という制限を超えてしまいます。
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue