#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10, inf = 15e8;
int A[maxn], B[maxn], C[maxn], ANSA, ANSB, n, l, r;
vector<int> ed;
vector<pair<int, int> > v[maxn];
int SZ[maxn], MX;
bool mark[maxn];
pair<int, int> val[2 * maxn];
void dfsS(int u, int par = -1) {
  SZ[u] = 1;
  for (pair<int, int> p : v[u]) {
    if (p.first != par && !mark[p.first])
      dfsS(p.first, u), SZ[u] += SZ[p.first];
  }
}
int dfsC(int u, int ss, int par = -1) {
  for (pair<int, int> p : v[u]) {
    if (p.first != par && !mark[p.first] && SZ[p.first] >= ss)
      return dfsC(p.first, ss, u);
  }
  return u;
}
void prep() {
  for (int i = 0; i < 2 * MX; i++) {
    val[i] = {-inf, -inf};
  }
}
pair<int, int> ask(int f, int s) {
  s = min(s, MX - 1);
  f += MX;
  s += MX;
  pair<int, int> ans = {-inf, -inf};
  while (f < s) {
    if (f & 1) ans = max(ans, val[f++]);
    if (s & 1) ans = max(ans, val[--s]);
    f >>= 1;
    s >>= 1;
  }
  return ans;
}
void add(int pos, pair<int, int> p) {
  pos += MX;
  while (pos > 0) {
    val[pos] = max(val[pos], p);
    pos >>= 1;
  }
}
void dfsadd(int u, int ln, int sm, int par) {
  add(ln, {sm, u});
  for (pair<int, int> p : v[u]) {
    if (p.first != par && !mark[p.first])
      dfsadd(p.first, ln + 1, sm + p.second, u);
  }
}
void dfsask(int u, int ln, int sm, int par) {
  pair<int, int> X = ask(max(0, l - ln), max(0, r - ln + 1));
  if (X.first + sm >= 0) ANSA = X.second, ANSB = u;
  for (pair<int, int> p : v[u]) {
    if (p.first != par && !mark[p.first])
      dfsask(p.first, ln + 1, sm + p.second, u);
  }
}
void solve(int u) {
  dfsS(u);
  MX = SZ[u] + 5;
  prep();
  u = dfsC(u, SZ[u] / 2);
  add(0, {0, u});
  mark[u] = 1;
  for (pair<int, int> p : v[u]) {
    if (!mark[p.first])
      dfsask(p.first, 1, p.second, u), dfsadd(p.first, 1, p.second, u);
  }
  for (pair<int, int> p : v[u]) {
    if (!mark[p.first]) solve(p.first);
  }
}
bool okay(int num) {
  memset(mark, 0, sizeof mark);
  for (int i = 1; i <= n; i++) {
    v[i].clear();
  }
  for (int i = 0; i < n - 1; i++) {
    v[A[i]].push_back({B[i], C[i] >= ed[num] ? 1 : -1});
    v[B[i]].push_back({A[i], C[i] >= ed[num] ? 1 : -1});
  }
  ANSA = ANSB = -1;
  solve(1);
  return ANSA != -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> l >> r;
  for (int i = 0; i < n - 1; i++) {
    cin >> A[i] >> B[i] >> C[i];
    ed.push_back(C[i]);
  }
  sort(ed.begin(), ed.end());
  int l = 0, r = n - 2, ansa = -1, ansb = -1;
  while (l <= r) {
    int mid = (l + r) / 2;
    if (okay(mid))
      ansa = ANSA, ansb = ANSB, l = mid + 1;
    else
      r = mid - 1;
  }
  cout << ansa << " " << ansb << endl;
  return 0;
}
