#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
int n, L, R, sz[100005], rt, mi, dep[100005], ed[100005], mxdep, sgt[400005],
    dist[100006], au, av, N;
bool used[100005];
vector<pair<int, int> > g[100005];
vector<int> subt;
map<int, int> disc;
void getsz(int x, int p) {
  sz[x] = 1;
  for (int i = 0; i < g[x].size(); i++) {
    int u = g[x][i].first;
    if (u == p || used[u]) continue;
    getsz(u, x);
    sz[x] += sz[u];
  }
}
void getcent(int x, int p, int tot) {
  int mx = 0;
  for (int i = 0; i < g[x].size(); i++) {
    int u = g[x][i].first;
    if (u == p || used[u]) continue;
    getcent(u, x, tot);
    mx = max(mx, sz[u]);
  }
  mx = max(mx, tot - sz[x]);
  if (mx < mi) {
    mi = mx;
    rt = x;
  }
}
void getdep(int x, int p, int mid, int d) {
  mxdep = max(mxdep, d);
  dep[x] = d;
  subt.push_back(x);
  for (int i = 0; i < g[x].size(); i++) {
    int u = g[x][i].first;
    if (u == p || used[u]) continue;
    if (g[x][i].second < mid)
      dist[u] = dist[x] - 1;
    else
      dist[u] = dist[x] + 1;
    getdep(u, x, mid, d + 1);
  }
  ed[x] = subt.size() - 1;
}
int query(int l, int r) {
  int res = 0;
  for (l += N, r += N; l < r; l >>= 1, r >>= 1) {
    if (l & 1) {
      if (dist[sgt[l]] > dist[res]) res = sgt[l];
      l++;
    }
    if (r & 1) {
      r--;
      if (dist[sgt[r]] > dist[res]) res = sgt[r];
    }
  }
  return res;
}
void modify(int x, int v) {
  for (x += N; x > 0; x >>= 1) {
    if (dist[v] > dist[sgt[x]]) sgt[x] = v;
  }
}
bool check(int x, int mid) {
  getsz(x, 0);
  mi = sz[x];
  rt = x;
  getcent(x, 0, mi);
  int v = rt;
  used[v] = true;
  for (int i = 0; i < g[v].size(); i++) {
    int u = g[v][i].first;
    if (used[u]) continue;
    if (check(u, mid)) return true;
  }
  subt.clear();
  dist[v] = mxdep = 0;
  getdep(v, 0, mid, 0);
  for (N = 1; N <= mxdep; N <<= 1)
    ;
  for (int i = 1; i < (N << 1); i++) sgt[i] = 0;
  modify(dep[v], v);
  for (int i = 1; i < subt.size(); i = ed[subt[i]] + 1) {
    for (int j = i; j <= ed[subt[i]]; j++) {
      int u = subt[j], l = max(0, L - dep[u]), r = min(mxdep, R - dep[u]);
      if (r < 0) continue;
      int nv = query(l, ++r);
      if (!nv) continue;
      if (dist[u] + dist[nv] >= 0) {
        au = u;
        av = nv;
        return true;
      }
    }
    for (int j = i; j <= ed[subt[i]]; j++) {
      int u = subt[j];
      modify(dep[u], u);
    }
  }
  used[v] = 0;
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> L >> R;
  for (int i = 1; i < n; i++) {
    int u, v, c;
    cin >> u >> v >> c;
    g[u].push_back(pair<int, int>(v, c));
    g[v].push_back(pair<int, int>(u, c));
    disc[c];
  }
  int cnt = 0;
  for (auto i = disc.begin(); i != disc.end(); i++) {
    i->second = cnt++;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < g[i].size(); j++) {
      g[i][j].second = disc[g[i][j].second];
    }
  }
  int lb = 0, ub = cnt;
  dist[0] = -0x3f3f3f3f;
  while (ub - lb > 1) {
    int mid = (lb + ub) >> 1;
    au = av = 0;
    memset((used), 0, sizeof(used));
    if (check(1, mid))
      lb = mid;
    else
      ub = mid;
  }
  check(1, lb);
  cout << au << ' ' << av << endl;
  return 0;
}
