#include <cstdio>
#include <vector>
#include <algorithm>

#define fin stdin
#define fout stdout
//FILE *fin = fopen("a.in", "r"), *fout = fopen("a.out", "w");

struct myc {
    int l, c, a;
    inline bool operator < (const myc &u) const {
        return a > u.a;
    }
};
std::vector < int > t;

int sef(int x) {
    if (t[x] == x) return x;
    else return t[x] = sef(t[x]);
}

int main() {
    int n, h, w;
    fscanf(fin, "%d%d%d", &n, &h, &w);

    t.resize(h + w);

    std::vector < myc > input;
    for (int i = 0; i < n; i++) {
        int a, b, c;
        fscanf(fin, "%d%d%d", &a, &b, &c);

        input.push_back({a, b, c});
    }

    std::sort(input.begin(), input.end());

    std::vector < bool > avem(h + w);
    for (int i = 0; i < h + w; i++)
        t[i] = i;

    long long ans = 0;
    for (auto &x : input) {
        int a = sef(x.l - 1), b = sef(x.c + h - 1);
        if (a != b && (avem[a] == 0 || avem[b] == 0)) {
            if (avem[b])
                avem[a] = 1;
            t[b] = a;
            ans += x.a;
        } else if (avem[a] == 0){
            avem[a] = 1;
            ans += x.a;
        }
    }

    fprintf(fout, "%lld\n", ans);

    fclose(fin);
    fclose(fout);
    return 0;
}
