#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#define LL long long
#define MAXN 500005
using namespace std;
int n,t,c;
int a[MAXN];
vector<int> adj[MAXN];
LL dp[MAXN];
bool cmp(int a,int b)
{
return dp[a]<dp[b];
}
void dfs(int u)
{
int v=0;
if(adj[u].size()==0)
{
dp[u]=a[u];
}
else
{
for(int i=0;i<adj[u].size();i++)
{
v=adj[u][i];
dfs(v);
sort(adj[u].begin(),adj[u].end(),cmp);
int num=ceil((double)a[u]*adj[u].size()/t);
for(int i=0;i<num&&i<adj[u].size();i++)
{
dp[u]+=dp[v];
}
}
}
}
int main()
{
cin>>n>>t>>c;
int b;
for(int i=1;i<=n;i++)
{
cin>>b>>a[i];
adj[b].push_back(i);
}
dfs(0);
cout<<dp[0]<<endl;
return 0;
}