#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

struct node {
	int L, R, c;
}a[5010];

LL w[5010][5010];
LL f[5010];

int main()
{
	int n, R, C[4];
	while (scanf("%d%d%d%d%d", &n, &R, &C[1], &C[2], &C[3]) != EOF) {
		if (n == 0) break;
		for (int i = 1; i <= n; i++) scanf("%d%d%d", &a[i].L, &a[i].R, &a[i].c);
		sort(a + 1, a + n + 1, [](const node &a, const node &b) {
				return a.R < b.R;
			});
		int r[3];
		for (int i = 0; i <= n; i++) {
			LL sum = 0;
			r[1] = r[2] = i ? a[i].R + R : -R;
			for (int j = i + 1; j <= n; j++) {
				if (a[j].L > r[a[j].c] + R) {
					r[a[j].c] = a[j].R + R;
					sum += C[a[j].c];
				}
				w[i][j] = sum;
			}
		}
		LL ans = w[0][n];
		for (int i = 1; i <= n; i++) {
			f[i] = w[0][i - 1] + C[3];
			for (int j = 1; j < i; j++) {
				f[i] = min(f[i], f[j] + w[j][i - 1] + C[3]);
			}
			ans = min(ans, f[i] + w[i][n]);
		}
		printf("%lld\n", ans);
	}
	return 0;
}
