#include <bits/stdc++.h>
using namespace std;
int n, m, k;
struct edge {
  int w;
  int u, v;
};
edge e[101];
struct node {
  long long sum;
  int position;
  set<int> v;
  node(long long sum, int pos, set<int> st) : sum(sum), position(pos), v(st) {}
};
inline bool operator<(const node &a, const node &b) { return a.sum > b.sum; }
bool cmp(edge e1, edge e2) { return e1.w < e2.w; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  priority_queue<node> res;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
  }
  if (k == 1) {
    printf("0\n");
    return 0;
  }
  sort(e + 1, e + 1 + m, cmp);
  set<int> s;
  int cnt = 1;
  s.insert(1);
  res.push(node(e[1].w, 1, s));
  while (!res.empty()) {
    node tmp = res.top();
    bool flag = true;
    set<int> st1, st2;
    for (int i : tmp.v) {
      if (st1.count(e[i].u) || st2.count(e[i].v)) {
        flag = false;
        break;
      }
      st1.insert(e[i].u);
      st2.insert(e[i].v);
    }
    if (flag) cnt++;
    if (cnt == k) break;
    res.pop();
    if (tmp.position == m) {
      continue;
    }
    s = tmp.v;
    s.insert(tmp.position + 1);
    res.push(node(tmp.sum + e[tmp.position + 1].w, tmp.position + 1, s));
    s.erase(tmp.position);
    res.push(node(tmp.sum - e[tmp.position].w + e[tmp.position + 1].w,
                  tmp.position + 1, s));
  }
  if (cnt < k) printf("-1\n");
  printf("%lld\n", res.top().sum);
  return 0;
}
