Problem: Little W and Little P decided to send letters to each other regarding the most important events during a day. There are n events during a day: at time moment t_i something happens to the person p_i (p_i is either W or P, denoting Little W and Little P, respectively), so he needs to immediately send a letter to the other person. They can send a letter using one of the two ways:

  * Ask Friendly O to deliver the letter directly. Friendly O takes d acorns for each letter.
  * Leave the letter at Wise R's den. Wise R values free space, so he takes c ⋅ T acorns for storing a letter for a time segment of length T. The recipient can take a letter from Wise R either when he leaves his own letter at Wise R's den, or at time moment t_{n + 1}, when everybody comes to Wise R for a tea. It is not possible to take a letter from Wise R's den at other time moments. The friends can store as many letters at Wise R's den as they want, paying for each one separately. 



Help the friends determine the minimum possible total cost of sending all letters.

Input

The first line contains three integers n, c, d (1 ≤ n ≤ 10^5, 1 ≤ c ≤ 10^2, 1 ≤ d ≤ 10^8) — the number of letters, the cost of storing a letter for one time unit at Wise R's den and the cost of delivering a letter via Friendly O.

The next n describe the events. The i-th of them contains an integer t_i and a character p_i (0 ≤ t_i ≤ 10^6, p_i is either W or P) — the time the i-th event happens and the person the event happens to.

The last line contains a single integer t_{n + 1} (0 ≤ t_{n+1} ≤ 10^6) — the time when everybody comes to Wise R for a tea and takes all remaining letters. 

It is guaranteed that t_i < t_{i + 1} for all i from 1 to n.

Output

Print a single integer — the minimum possible cost of delivery of all letters.

Examples

Input


5 1 4
0 P
1 W
3 P
5 P
8 P
10


Output


16


Input


10 10 94
17 W
20 W
28 W
48 W
51 P
52 W
56 W
62 P
75 P
78 P
87


Output


916

Note

One of optimal solutions in the first example:

  * At time moment 0 Little P leaves the letter at Wise R's den.
  * At time moment 1 Little W leaves his letter at Wise R's den and takes Little P's letter. This letter is at the den from time moment 0 to time moment 1, it costs 1 acorn.
  * At time moment 3 Little P sends his letter via Friendly O, it costs 4 acorns.
  * At time moment 5 Little P leaves his letter at the den, receiving Little W's letter which storage costs 4 acorns.
  * At time moment 8 Little P leaves one more letter at the den.
  * At time moment 10 Little W comes to the den for a tea and receives the two letters, paying 5 and 2 acorns.



The total cost of delivery is thus 1 + 4 + 4 + 5 + 2 = 16 acorns.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
template <class T>
inline void ckmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void ckmax(T& a, T b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n;
  long long cost, delta;
  while (cin >> n >> cost >> delta) {
    vector<long long> a(n + 1);
    vector<int> bit(n);
    for (int i = 0; i < (n); ++i) {
      int x;
      string y;
      cin >> x >> y;
      a[i] = x;
      bit[i] = (int)(y[0] == 'W');
    }
    cin >> a[n];
    vector<long long> cnt[2];
    vector<long long> sa[2];
    for (int b = 0; b < (2); ++b) {
      cnt[b] = vector<long long>(n + 1);
      for (int i = 0; i < (n); ++i)
        cnt[b][i + 1] = cnt[b][i] + (int)(bit[i] == b);
      sa[b] = vector<long long>(n + 1);
      for (int i = 0; i < (n); ++i)
        sa[b][i + 1] = sa[b][i] + (bit[i] == b ? a[i] : 0);
    }
    vector<long long> f(n + 1);
    vector<long long> g1[2];
    vector<long long> g2[2];
    for (int b = 0; b < (2); ++b) {
      g1[b] = vector<long long>(n);
      g2[b] = vector<long long>(n);
    }
    long long min_g1[2] = {1LL << 60, 1LL << 60};
    int p = 0;
    list<int> que[2];
    list<int> que2[2];
    for (int i = 0; i < (n + 1); ++i) {
      f[i] = delta * i;
      for (; (a[i] - a[p]) * cost > delta; ++p)
        for (int b = 0; b < (2); ++b)
          if (bit[p] != b) ckmin(min_g1[b], g1[b][p]);
      for (int b1 = 0; b1 < (2); ++b1)
        if (i == n || bit[i] == b1) {
          int b2 = (b1 ^ 1);
          long long base_cost1 = a[i] * cost + cnt[b1][i] * delta +
                                 cnt[b2][p] * delta +
                                 a[i] * cost * (cnt[b2][i] - cnt[b2][p]) -
                                 cost * (sa[b2][i] - sa[b2][p]);
          ckmin(f[i], base_cost1 + min_g1[b1]);
          long long base_cost2 = a[i] * cost + cnt[b1][i] * delta +
                                 a[i] * cost * cnt[b2][i] - cost * sa[b2][i];
          auto& q = que[b1];
          auto eval = [&](int j) {
            return base_cost2 + g2[b1][j] - a[i] * cost * cnt[b2][j + 1];
          };
          while (((int)q.size()) >= 2) {
            long long t1 = eval(q.front());
            auto it = q.begin();
            ++it;
            long long t2 = eval(*it);
            if (t1 < t2) break;
            q.pop_front();
          }
          if (((int)q.size()) > 0) ckmin(f[i], eval(q.front()));
        }
      if (i < n) {
        for (int b1 = 0; b1 < (2); ++b1) {
          int b2 = (b1 ^ 1);
          g1[b1][i] = f[i] - a[i] * cost - cnt[b1][i + 1] * delta -
                      cnt[b2][i + 1] * delta;
          g2[b1][i] = f[i] - a[i] * cost - cnt[b1][i + 1] * delta +
                      cost * sa[b2][i + 1];
        }
        for (int b1 = 0; b1 < (2); ++b1)
          if (b1 != bit[i]) {
            int b2 = (b1 ^ 1);
            auto slope = [&](int i, int j) {
              return (double)(g2[b1][j] - g2[b1][i]) /
                     (double)(cnt[b2][j + 1] - cnt[b2][i + 1]);
            };
            auto& q = que[b1];
            while (((int)q.size()) >= 2) {
              int last = q.back();
              auto it = q.end();
              --it;
              --it;
              int prev = *it;
              if (slope(prev, last) < slope(prev, i)) break;
              q.pop_back();
            }
            q.push_back(i);
            que2[b1].push_back(i);
          }
      }
    }
    cout << f[n] << endl;
    break;
  }
  return 0;
}