fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun intString n = if 0 <= n then Int.toString n else "-" ^ Int.toString (abs n) fun printList [] = ignore () | printList (h :: tl) = ( print (intString h); print "\n"; printList tl ) fun findMaxValue (l, r, a, b) = let fun findMaxValueAux i maxAcc = if r < i then maxAcc else findMaxValueAux (i + 1) (Int.max(a * i + b, maxAcc)) in findMaxValueAux l (a * l + b) end val () = let val t = readInt () val cases = List.tabulate (t, fn _ => (readInt (), readInt (), readInt (), readInt ())) val ans = List.map (fn (l, r, a, b) => findMaxValue (l, r, a, b)) cases in printList ans end