#include <fstream>
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <deque>
#include <algorithm>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
#define forn(i,n) for (int i=0;i<n;i++)
#define mp make_pair
struct sRib
{
	int p,q,r;
	sRib(int pp, int qq, int rr)
	{
		p=pp;
		q=qq;
		r=rr;
	}
	bool operator < (sRib b)
	{
		return r<b.r;
	}
};
vector <int> arr;
vector <bool> fl,fl2;
vector <sRib> pr;
int n,k,t;
void goup(int x)
{
	if (x==1) return;
	if (arr[x/2]<arr[x])
	{
		swap(arr[x/2],arr[x]);
		goup(x/2);
	}
}
void godown(int x)
{
	int l1=x*2;
	int l2=x*2+1;
	if (l1>arr[0]) l1=-1;
	if (l2>arr[0]) l2=-1;
	if ((l1==-1)&&(l2==-1))
		return;
	if (l2==-1)
	{
		if (arr[x]<arr[l1])
		{
			swap(arr[x],arr[l1]);
			godown(l1);
		}
		return;
	}
	if ((arr[x]<arr[l1])&&(arr[l2]<=arr[l1]))
	{
		swap(arr[x],arr[l1]);
		godown(l1);
		return;
	}
	if ((arr[x]<arr[l2])&&(arr[l1]<=arr[l2]))
	{
		swap(arr[x],arr[l2]);
		godown(l2);
		return;
	}
}
bool push(int x)
{
	if (arr[0]==t&&x>=arr[1])
		return false;
	if (arr[0]==t&&x<arr[1])
	{
		arr[1]=x;
		godown(1);
	}
	else
	{
		arr[0]++;
		arr[arr[0]]=x;
		goup(arr[0]);
	}
	return true;
}
void work(int pos,int sum)
{
	if (sum>arr[1])
		return;
	for (int i=pos;i<pr.size();i++)
		if (!fl[pr[i].p]&&!fl2[pr[i].q])
			push(sum+pr[i].r);
	for (int i=pos;i<pr.size();i++)
		if (!fl[pr[i].p]&&!fl2[pr[i].q])
		{
			fl[pr[i].p]=1;
			fl2[pr[i].q]=1;
			work(i+1,sum+pr[i].r);
			fl[pr[i].p]=0;
			fl2[pr[i].q]=0;
		}
}
int main()
{
	//ifstream cin("input.txt");
	cin>>n>>k>>t;
	fl.resize(n);
	fl2.resize(n);
	int p,q,r;
	for (int i=0;i<k;i++)
	{
		cin>>p>>q>>r;
		p--;
		q--;
		pr.push_back(sRib(p,q,r));
	}
	arr.resize(t+1);
	sort(pr.begin(),pr.end());
	work(0,0);
	cout<<arr[1];
}