Byteasar 在 Byteotian Bit Bank (BBB) 有一个账户。账户初始余额为 $p$,最终余额为 $q$。每笔交易要么是存入一个 bythaler,要么是取出一个 bythaler。账户余额始终非负。银行柜员准备了一份银行对账单:一张印有加号和减号序列的纸条(加号表示存入一个 bythaler,减号表示取出一个 bythaler)。不久后发现,有些交易记录不正确。柜员无法重新打印对账单,只能修改现有的对账单。对账单不需要与事实完全一致,只要交易序列满足以下两个条件即可:
- 最终余额与初始余额及对账单中的交易序列相符;
- 根据对账单中的交易序列,账户余额始终非负。
你需要计算柜员修改对账单所需的最少时间。
柜员可以:
- 花费 $x$ 秒将任意选定的交易符号反转;或者
- 花费 $y$ 秒将最后一次交易移除并放到对账单的最前面。
例如,若 $p=2$,$q=3$,则 --++-+-++-+-+ 是一个正确的对账单。另一方面,---++++++ 是错误的,因为第三次交易后账户余额会变为负数,且最终余额应为 $3$ 而非 $5$。不过,可以通过将倒数第二个符号反转,并将最后一次交易移到开头来修正它。
编写一个程序:
- 从标准输入读取 Byteasar 账户当前的对账单(加号和减号序列)以及数字 $p$、$q$、$x$ 和 $y$。
- 向标准输出写入使对账单满足初始和最终余额一致且余额始终非负所需的最小秒数。
输入格式
第一行包含 $5$ 个整数 $n$、$p$、$q$、$x$ 和 $y$ ($1 \le n \le 1\,000\,000$,$0 \le p,q \le 1\,000\,000$,$1 \le x,y \le 1\,000$),以空格分隔,分别表示:Byteasar 进行的交易次数、账户初始余额和最终余额、执行一次反转(改变符号)所需的时间以及将交易移到开头所需的时间。第二行包含一个长度为 $n$ 的符号序列(每个符号为加号或减号),中间没有空格。
输出格式
输出一行,包含一个整数,即修正对账单所需的最少秒数。如果不需要修正,则输出 $0$。你可以假设对于每组测试数据,都存在一种合法的修改方案。
样例
输入 1
9 2 3 2 1 ---++++++
输出 1
3