#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;

const int MAXN = 3e5+10;

int bit[MAXN];
int par[MAXN];
int parent(int i) {
  return par[i] < 0 ? i: (par[i]=parent(par[i]));
}

bool merge(int a, int b) {
  int x = parent(a);
  int y = parent(b);
  if (x==y) {
    if (bit[x]) return false;
    else return bit[x] = 1;
  }
  if (bit[x] && bit[y]) return false;
  bit[x]+=bit[y];
  par[y] = x;
  return 1;
}

int gc=0;
map<pair<int,int>, int> m;
int gid(int r, int c) {
  auto p = make_pair(r,c);
  if (m.count(p)) {
    return m[p];
  }
  else {
    return  m[p] = gc++;
  }
}

int n, h, w;

int main(){
  cin.tie(0); ios_base::sync_with_stdio(0);
  cin >> n >> h >> w;
  memset(par, -1,sizeof par);
  vector<vector<int>> v;
  for(int i=0;i<n;i++) {
    int r, c, w;
    cin >> r >> c >> w;
    v.push_back({w,r,c});
  }
  sort(v.rbegin(), v.rend());
  ll ans = 0;
  for(auto p: v) {
    if (merge(gid(p[1],0), gid(p[2],1))){
      ans+=p[0];
      //cerr << "ADDING " << p[1] << " " << p[2] << " " << p[0] <<endl;
    }
    //else //cerr << "NOT ADDING " << p[1] << " " << p[2] << " " << p[0] <<endl;
  }
  cout << ans <<endl;
}

