#include <bits/stdc++.h>
using namespace std;
pair<int, int> D[100005], E[100005];
pair<int, pair<int, int> > id[100005];
vector<int> a[100005], b[100005];
int U[100005], tmp[100005], son[100005], size[100005], vis[100005], Q[100005];
int sum, pre, Left, Right, _, L, R, mid, INF = 1e9;
int ansl, ansr, n, i, x, y, z, root, ans;
void Get(int k, int fa) {
  size[k] = 1;
  son[k] = 0;
  for (int i = 0, x; i < a[k].size(); i++)
    if ((x = a[k][i]) != fa && !vis[x]) {
      Get(x, k);
      size[k] += size[x];
      son[k] = max(son[k], size[x]);
    }
  son[k] = max(son[k], sum - size[k]);
  if (son[k] < son[root]) root = k, pre = fa;
}
int bomb(int x) { return x >= U[mid] ? 1 : -1; }
void calc(int k, int fa, int value, int d) {
  _ = max(_, d);
  D[d] = max(D[d], make_pair(value, k));
  for (int i = 0, x; i < a[k].size(); i++)
    if ((x = a[k][i]) != fa && !vis[x])
      calc(x, k, value + bomb(b[k][i]), d + 1);
}
void Count(int x, int y) {
  if (U[mid] <= ans) return;
  ans = U[mid];
  ansl = x;
  ansr = y;
}
int check(int k) {
  int cnt = 0;
  for (int i = 0, x; i < a[k].size(); i++)
    if (!vis[x = a[k][i]])
      _ = 0, calc(x, k, bomb(b[k][i]), 1),
      id[++cnt] = make_pair(_, make_pair(x, bomb(b[k][i])));
  sort(id + 1, id + cnt + 1);
  E[0] = make_pair(_ = 0, k);
  for (int i = 1; i <= id[cnt].first; i++) E[i] = make_pair(-INF, 0);
  for (int i = 1; i <= cnt; i++) {
    int p = id[i - 1].first + 1, h = 1, t = 0;
    for (int d = 1; d <= id[i].first; d++) D[d] = make_pair(-INF, 0);
    ;
    calc(id[i].second.first, k, id[i].second.second, 1);
    for (int d = 1; d <= _; d++) {
      for (; p > 0 && p - 1 + d >= Left; p--) {
        while (h <= t && E[p - 1] >= E[Q[t]]) t--;
        Q[++t] = p - 1;
      }
      while (h <= t && Q[h] + d > Right) h++;
      if (h <= t)
        if (E[Q[h]].first + D[d].first >= 0)
          return Count(E[Q[h]].second, D[d].second), 1;
    }
    for (int j = 1; j <= _; j++) E[j] = max(E[j], D[j]);
  }
  return 0;
}
void Divide(int k) {
  vis[k] = 1;
  R = *U;
  while (L < R) {
    mid = (L + R + 1) >> 1;
    if (check(k))
      L = mid;
    else
      R = mid - 1;
  }
  int _sum = sum, _pre = pre;
  for (int i = 0, x; i < a[k].size(); i++)
    if (!vis[x = a[k][i]]) {
      sum = (_pre == x) ? _sum - size[k] : size[x];
      root = 0;
      Get(x, 0);
      Divide(root);
    }
}
int main() {
  scanf("%d%d%d", &n, &Left, &Right);
  id[0] = make_pair(0, make_pair(0, 0));
  for (i = 1; i < n; i++)
    scanf("%d%d%d", &x, &y, &z), U[++*U] = ++z, a[x].push_back(y),
                                 a[y].push_back(x), b[x].push_back(z),
                                 b[y].push_back(z);
  sort(U + 1, U + *U + 1);
  *U = unique(U + 1, U + *U + 1) - (U + 1);
  son[root = 0] = n + 1;
  sum = n;
  Get(1, 0);
  Divide(root);
  printf("%d %d\n", ansl, ansr);
}
