#include<bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)

using ll = long long;

template<typename X, typename Y>
bool chmax(X& a, Y b) { return (a < b) ? a = b, 1 : 0; }
template<typename X, typename Y>
bool chmin(X& a, Y b) { return (a > b) ? a = b, 1 : 0; }


const int MAXN = 1e5 + 5;

int N, A[MAXN], B[MAXN];
ll X, Y, Z;

namespace Subtask1 {
    bool check() {
        return N == 2;
    }
    void solve() {
        
    }
}

namespace Subtask2 {
    bool check() {
        return N <= 100;
    }
    void solve() {
            
    }
}

namespace Fulltask {
    void solve() {
        ll ans = 0;
        priority_queue<ll> pq, _pq;
        FOR(i, 1, N) {
            int M = min(A[i], B[i]);
            A[i] -= M; B[i] -= M;
            ans += (ll)A[i] * Y + (ll)B[i] * X;
            ll C = (ll)i * Z;
            while (A[i]--) {
                if (!_pq.empty() && _pq.top() - C > 0) {
                    ll K = _pq.top(); _pq.pop();
                    ans -= (K - C);
                    pq.push(X + Y + 2LL * C - K);
                } else pq.push(X + Y + C);
            }
            while (B[i]--) {
                if (!pq.empty() && pq.top() - C > 0) {
                    ll K = pq.top(); pq.pop();
                    ans -= (K - C);
                    _pq.push(X + Y + 2LL * C - K);
                } else _pq.push(X + Y + C);
            }
        }
        cout << ans << "\n";
    }
}

void solve() {
    cin >> N >> X >> Y >> Z;
    FOR(i, 1, N) cin >> A[i] >> B[i];
    Fulltask::solve();
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    // freopen("GARDEN.INP", "r", stdin);
    // freopen("GARDEN.OUT", "w", stdout);

    int tests = 1; // cin >> tests;
    while (tests--) solve();

    #ifdef LOCAL
    cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
    #endif
    return 0;
}