#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;
const ll INF = 1e18 + 67;

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

namespace Subtask1 {
    bool check() {
        return N == 2;
    }
    void solve() {
        ll ans = 0;
        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;
        }
        if (X + Y > Z) {
            ll D = A[1] > 0 ? min(A[1], B[2]) : min(A[2], B[1]);
            ans += D * Z;
            ans -= A[1] > 0 ? D * X : D * Y;
            ans -= A[2] > 0 ? D * X : D * Y;
        }
        cout << ans << "\n";
    }
}

namespace Subtask2 {
    bool check() {
        return N <= 100;
    }
    void solve() {
        vector<int> P, Q;
        FOR(i, 1, N) {
            FOR(k, 1, A[i]) P.push_back(i);
            FOR(k, 1, B[i]) Q.push_back(i);
        }
        int nP = P.size(), nQ = Q.size();
        vector<vector<ll>> dp(nP + 5, vector<ll>(nQ + 5, INF));
        dp[0][0] = 0;
        FOR(i, 0, nP) FOR(j, 0, nQ) {
            if (dp[i][j] == INF) continue;
            if (i < nP) chmin(dp[i + 1][j], dp[i][j] + Y);
            if (j < nQ) chmin(dp[i][j + 1], dp[i][j] + X);
            if (i < nP && j < nQ) chmin(dp[i + 1][j + 1], dp[i][j] + Z * abs(P[i] - Q[j]));
        }
        cout << dp[nP][nQ] << "\n";
    }
}

namespace Fulltask {
    void solve() {
        ll ans = 0;
        priority_queue<ll> pqA, pqB;
        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] > 0) {
                if (!pqB.empty() && pqB.top() - C > 0) {
                    ll K = pqB.top(); pqB.pop();
                    ans -= (K - C);
                    pqA.push(X + Y + 2LL * C - K);
                } else pqA.push(X + Y + C);
                A[i]--;
            }
            while (B[i] > 0) {
                if (!pqA.empty() && pqA.top() - C > 0) {
                    ll K = pqA.top(); pqA.pop();
                    ans -= (K - C);
                    pqB.push(X + Y + 2LL * C - K);
                } else pqB.push(X + Y + C);
                B[i]--;
            }
        }
        cout << ans << "\n";
    }
}

void solve() {
    cin >> N >> X >> Y >> Z;
    FOR(i, 1, N) cin >> A[i] >> B[i];
    if (Subtask1::check()) Subtask1::solve();
    else if (Subtask2::check()) Subtask2::solve();
    else 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;
}
