#include <bits/stdc++.h>
using namespace std;
struct node {
  int t, nxt;
} edge[110000 << 1];
int headline[110000], E;
inline void add(int f, int t) {
  edge[E].t = t;
  edge[E].nxt = headline[f];
  headline[f] = E++;
}
int n, k, p;
int dp[110000];
long long s[110000], t[110000];
void dfs(int u, int fa, int deep) {
  dp[deep]++;
  for (int i = headline[u]; ~i; i = edge[i].nxt) {
    int v = edge[i].t;
    if (v != fa) {
      dfs(v, u, deep + 1);
    }
  }
}
void solve(void) {
  memset(headline, -1, sizeof(headline));
  E = 0;
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i < (n - 1); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    add(a, b);
    add(b, a);
  }
  dfs(1, -1, 0);
  dp[0] = 0;
  s[0] = 0;
  t[0] = 0;
  for (int i = (1); i <= (n); i++) s[i] = s[i - 1] + dp[i];
  for (int i = (1); i <= (n); i++) t[i] = t[i - 1] + (long long)i * dp[i];
  long long ans = 0;
  for (int d1 = n, d2 = n; d1 >= 1; d1--) {
    while (true) {
      long long tt = s[d1] - s[d2 - 1];
      long long kk = t[d1] - t[d2 - 1];
      if (tt * d1 - kk > p) break;
      d2--;
    }
    long long tt = s[d1] - s[d2];
    long long price = tt * d1 - (t[d1] - t[d2]);
    price = p - price;
    long long aa = ((dp[d2]) < (k - tt) ? (dp[d2]) : (k - tt));
    if (d1 > d2) aa = ((aa) < (price / (d1 - d2)) ? (aa) : (price / (d1 - d2)));
    ans = ((ans) > (tt + aa) ? (ans) : (tt + aa));
  }
  printf("%I64d\n", ans);
}
int main(void) {
  while (3 == scanf("%d%d%d", &n, &k, &p)) solve();
  return 0;
}
