← Home
package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int64 {
		for idx < len(data) {
			c := data[idx]
			if c > ' ' {
				break
			}
			idx++
		}
		var n int64
		for idx < len(data) {
			c := data[idx]
			if c < '0' || c > '9' {
				break
			}
			n = n*10 + int64(c-'0')
			idx++
		}
		return n
	}

	n := int(nextInt())
	a := nextInt()
	r := nextInt()
	m := nextInt()

	h := make([]int64, n)
	var maxH int64
	for i := 0; i < n; i++ {
		h[i] = nextInt()
		if h[i] > maxH {
			maxH = h[i]
		}
	}

	moveCost := m
	if a+r < moveCost {
		moveCost = a + r
	}

	calc := func(x int64) int64 {
		var need, extra int64
		for _, v := range h {
			if v < x {
				need += x - v
			} else {
				extra += v - x
			}
		}
		moved := need
		if extra < moved {
			moved = extra
		}
		return moved*moveCost + (need-moved)*a + (extra-moved)*r
	}

	l, rr := int64(0), maxH
	for l < rr {
		mid := (l + rr) / 2
		if calc(mid) <= calc(mid+1) {
			rr = mid
		} else {
			l = mid + 1
		}
	}

	w := bufio.NewWriter(os.Stdout)
	fmt.Fprint(w, calc(l))
	w.Flush()
}