#include <bits/stdc++.h>
using namespace std;
#define TR(i,v)       for(__typeof((v).begin())i=(v).begin();i!=(v).end();++i)
#define DEBUG(x)      cout<<#x<<" = "<<x<<endl
#define SIZE(p)       (int)(p).size()
#define MP(a,b)       make_pair((a),(b))
#define ALL(p)        (p).begin(),(p).end()
#define rep(i,n)      for(int i=0;i<(int)(n);++i)
#define REP(i,a,n)    for(int i=(a);i<(int)(n); ++i)
#define FOR(i,a,b)    for(int i=(int)(a);i<=(int)(b);++i)
#define FORD(i,b,a)   for(int i=(int)(b);i>=(int)(a);--i)
#define CLR(x,y)      memset((x),(y),sizeof((x)))
typedef long long LL;
typedef pair<int,int> pii;
struct House{
  int l,r,tp;
  void read(){
    scanf("%d%d%d",&l,&r,&tp);
  }
}A[5005];
LL cost1[5005][5005],cost2[5005][5005],nxt1[5005],nxt2[5005],dp[5005];
int main(){
  int n,R,C1,C2,C3;
  while(~scanf("%d%d%d%d%d",&n,&R,&C1,&C2,&C3) && n){
    FOR(i,1,n)A[i].read(),A[i].l-=R,A[i].r+=R;
    sort(A+1,A+1+n,[](House a,House b){return a.r<b.r;});
    FOR(i,1,n)
    FOR(j,1,n)cost1[i][j]=cost2[i][j]=0;    
    FOR(i,1,n){
      int s=0,cr=-(int)2e9;nxt1[i]=i-1;
      FOR(j,i,n){
        if(A[j].tp==1 && A[j].l>cr)++s,cr=A[j].r;
        cost1[i][j]=s;
        if(A[j].tp==1 && A[j].l>A[i].r && nxt1[i]<i)nxt1[i]=j;
      }
    }
    FOR(i,1,n){
      int s=0,cr=-(int)2e9;nxt2[i]=i-1;
      FOR(j,i,n){
        if(A[j].tp==2 && A[j].l>cr)++s,cr=A[j].r;
        cost2[i][j]=s;
        if(A[j].tp==2 && A[j].l>A[i].r && nxt2[i]<i)nxt2[i]=j;
      }
    }    
    FOR(i,1,n){
      dp[i]=C3+cost1[1][i-1]*C1+cost2[1][i-1]*C2;
      REP(j,1,i)
        dp[i]=min(dp[i],dp[j]+cost1[nxt1[j]][i-1]*C1+cost2[nxt2[j]][i-1]*C2+C3);
    }
    LL res=cost1[1][n]*C1+cost2[1][n]*C2;
    FOR(i,1,n)
      res=min(res,dp[i]+(nxt1[i]<i?0:cost1[nxt1[i]][n]*C1)+(nxt2[i]<i?0:cost2[nxt2[i]][n]*C2));
    printf("%lld\n",res);
  }
  return 0;
}
