小红的数组操作(hard version)
题号:NC254289
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

请注意,本题和easy版本的唯一区别是x的数据范围没有了x=1的限制。

小红拿到了一个数组,她可以进行若干次以下操作:
1.选择一个元素,花费p,使其加x
1.选择一个元素,花费q,使其减y

小红希望若干次操作后,数组的平均数是一个整数。你能帮小红求出最小的总代价吗?

输入描述:

第一行输入五个正整数n,p,x,q,yn代表数组的大小,其余几个变量如题目描述所示。
第二行输入n个正整数a_i,代表数组的元素。
1\leq n\leq 10^5
1\leq a_i,x,y,p,q \leq 10^9

输出描述:

如果无解,请输出-1。
否则输出一个整数,代表最小的总代价。
示例1

输入

复制
3 3 1 5 6
2 3 4

输出

复制
0
示例2

输入

复制
5 5 2 4 3
2 3 2 2 2

输出

复制
8