#include <bits/stdc++.h>

using namespace std;

const int MAXN = 60000;

int n, X, Y;
vector <int> e[MAXN], sc;
int v[MAXN], st[MAXN], p[MAXN];
int f[MAXN][2];
int data[MAXN][2];

int dfs(int x, int t)
{
	if (data[x][t]!=-5201314) return data[x][t];
	//no flip
	int tmp1 = t^st[x]^p[x] ? -v[x] : v[x];
	for (int k = 0; k<e[x].size(); k++){
		int y = e[x][k];	
		tmp1 += dfs(y,t^st[x]);
	}
	//flip
	int tmp2 = t^st[x]^p[x] ? v[x] : -v[x];
	tmp2 -= st[x] ? Y : X;
	for (int k = 0; k<e[x].size(); k++){
		int y = e[x][k];	
		tmp2 += dfs(y,t^st[x]^1);
	}
	if (x==0) tmp2 = -1;
	return data[x][t] = max(tmp1, tmp2);
}

int main()
{
	while (scanf("%d%d%d", &n, &X, &Y)==3){
		for (int i = 0; i<=n; i++){
			e[i].clear();
			data[i][0] = data[i][1] = -5201314;
		}
		for (int i = 1; i<=n; i++){
			int tmp;
			scanf("%d%d%d%d", v+i, &tmp, st+i, p+i);
			e[tmp].push_back(i);
		}
		int res = dfs(0,0);
		if (res>=0) cout<<res<<endl;
		else cout<<"HAHAHAOMG"<<endl;
	}
}
