#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll inf=1E16;
ll ans,n,have,d,m[55],sum[55],sumW[55];
ll f[55*55*55];
int fa[55];
inline void chmin(ll&x,ll y)
{
	x=min(x,y);
}
struct pt
{
	ll v,w,id;
	bool operator<(const pt&A)const
	{
		return v*A.w>A.v*w;
	}
}a[55];
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>have>>d>>m[1];
	++sum[1],sumW[1]+=m[1];
	for(int i=2;i<=n;++i)
	{
		cin>>m[i]>>fa[i];
		for(int j=i;j;j=fa[j])
			++sum[j],sumW[j]+=m[i];
	}
	int lim=0,l=min(d,n);
	for(int i=1;i<=n;++i)
	{
		a[i]=(pt){sum[i],sumW[i],i};
		lim+=sum[i]*l;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=lim;++i)
		f[i]=inf;
	for(int i=1;i<=n;++i)
	{
		ll v=a[i].v,w=a[i].w;
		for(int j=1;j<=l;++j)
			for(int k=lim;k>=v;--k)
				chmin(f[k],f[k-v]+w);
	}
	for(int j=0;j<=lim;++j)
	{
		if(f[j]>have)
			continue;
		ll left=have-f[j],now=j;
		for(int i=1;i<=n;++i)
		{
			ll g=left/a[i].w;
			if(a[i].id!=1)
				g=min(g,d-l);
			left-=g*a[i].w,now+=g*a[i].v;
		}
		ans=max(ans,now);
	}
	cout<<ans<<endl;
	return 0;
}
