#include <bits/stdc++.h>
using namespace std;
struct edge {
  int v, x, w;
};
struct state {
  int len, id, weight;
  state(int a, int b, int c) : len(a), id(b), weight(c) {}
  bool operator<(const state &b) const { return len < b.len; }
};
vector<edge> w[100001];
int l, r, n, b, e, vis[100001], NeXT[100001], maxs[100001], s[100001],
    id[100001];
int dfs(int u, int p) {
  int ans = 1, max = 0, id = 0;
  for (edge i : w[u])
    if (i.v != p && !vis[i.v]) {
      int res = dfs(i.v, u);
      ans += res;
      if (max < res) max = res, id = i.v;
    }
  return NeXT[u] = id, maxs[u] = max, s[u] = ans;
}
vector<state> v;
void fill(int u, int p, int len, int weight) {
  if (len > r) return;
  for (edge i : w[u])
    if (i.v != p && !vis[i.v]) fill(i.v, u, len + 1, weight + i.w);
  v.push_back({len, u, weight});
}
void number(int u, int p, int num) {
  id[u] = num;
  for (edge i : w[u])
    if (i.v != p && !vis[i.v]) number(i.v, u, num);
}
bool solve(int u) {
  int size = dfs(u, -1), num = 1;
  while (maxs[u] > size / 2 + 1) u = NeXT[u];
  vis[u] = 1;
  for (edge i : w[u])
    if (!vis[i.v]) number(i.v, u, num++);
  v.clear();
  fill(u, -1, 0, 0);
  sort(v.begin(), v.end());
  int j = lower_bound(v.begin(), v.end(), state(l, 0, 0)) - v.begin(),
      k = v.size() - 1;
  if (j >= v.size()) j--;
  set<pair<int, int>> m;
  for (int x = j + 1; x <= k; x++) m.insert({v[x].weight, v[x].id});
  for (int i = 0; i < v.size(); i++) {
    while (j >= 0 && v[i].len + v[j].len >= l)
      m.insert({v[j].weight, v[j].id}), j--;
    while (k >= 0 && k >= j && v[i].len + v[k].len > r)
      m.erase({v[k].weight, v[k].id}), k--;
    if (!m.empty() && v[i].weight + m.rbegin()->first >= 0 &&
        id[m.rbegin()->second] != id[v[i].id]) {
      b = v[i].id;
      e = m.rbegin()->second;
      return 1;
    }
  }
  for (edge i : w[u])
    if (!vis[i.v] && solve(i.v)) return 1;
  return 0;
}
bool check(int x) {
  for (int i = 1; i <= n; i++)
    for (edge &j : w[i]) j.w = (j.x >= x ? 1 : -1);
  memset(vis, 0, sizeof vis);
  return solve(1);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> l >> r;
  vector<int> val;
  for (int i = 1; i < n; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    w[a].push_back({b, c, 0});
    w[b].push_back({a, c, 0});
    val.push_back(c);
  }
  sort(val.begin(), val.end());
  val.erase(unique(val.begin(), val.end()), val.end());
  int left = 0, right = val.size() - 1, from = -1, to = -1;
  while (left <= right) {
    int mid = (left + right) >> 1;
    if (check(val[mid]))
      left = mid + 1, from = b, to = e;
    else
      right = mid - 1;
  }
  cout << from << ' ' << to << endl;
  return 0;
}
