#include <bits/stdc++.h>
using namespace std;
template <class T>
void chmax(T& a, const T& b) {
  a = max(a, b);
}
template <class T>
void chmin(T& a, const T& b) {
  a = min(a, b);
}
template <class T>
void uniq(T& c) {
  sort(c.begin(), c.end());
  c.erase(unique(c.begin(), c.end()), c.end());
}
template <class T>
string to_s(const T& a) {
  ostringstream os;
  os << a;
  return os.str();
}
template <class T>
T to_T(const string& s) {
  istringstream is(s);
  T res;
  is >> res;
  return res;
}
template <typename T>
void print_container(ostream& os, const T& c) {
  const char* _s = " ";
  if (!c.empty()) {
    __typeof__(c.begin()) last = --c.end();
    for (__typeof__((c).begin()) it = (c).begin(); it != (c).end(); ++it) {
      os << *it;
      if (it != last) cout << _s;
    }
  }
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const multiset<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const deque<T>& c) {
  print_container(os, c);
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const map<T, U>& c) {
  print_container(os, c);
  return os;
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << "( " << p.first << ", " << p.second << " )";
  return os;
}
template <class T>
void print(T a, int n, const string& deli = " ", int br = 1) {
  for (int i = 0; i < n; ++i) {
    cout << a[i];
    if (i + 1 != n) cout << deli;
  }
  while (br--) cout << endl;
}
template <class T>
void print2d(T a, int w, int h, int width = -1, int br = 1) {
  for (int i = 0; i < h; ++i) {
    for (int j = 0; j < w; ++j) {
      if (width != -1) cout.width(width);
      cout << a[i][j] << ' ';
    }
    cout << endl;
  }
  while (br--) cout << endl;
}
template <class T>
void input(T& a, int n) {
  for (int i = 0; i < n; ++i) cin >> a[i];
}
template <class T>
void input(T* a, int n) {
  for (int i = 0; i < n; ++i) cin >> a[i];
}
void fix_pre(int n) {
  cout.setf(ios::fixed, ios::floatfield);
  cout.precision(10);
}
void fast_io() {
  cin.tie(0);
  ios::sync_with_stdio(false);
}
bool in_rect(int x, int y, int w, int h) {
  return 0 <= x && x < w && 0 <= y && y < h;
}
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
const double PI = acos(-1.0);
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  vector<pair<pair<int, int>, int> > p;
  for (int i = 0; i < (int)(m); ++i) {
    int l, r, c;
    cin >> l >> r >> c;
    --l, --r;
    p.push_back(pair<pair<int, int>, int>(pair<int, int>(r, l), c));
  }
  sort((p).begin(), (p).end());
  const long long inf = ((long long)(1e16));
  long long dp[333][333];
  long long dp2[333][333];
  for (int i = 0; i <= (int)(n); ++i)
    for (int j = 0; j <= (int)(n); ++j) dp[i][j] = dp2[i][j] = inf;
  for (int i = 0; i <= (int)(n); ++i) dp[i][0] = 0;
  int right = 0;
  for (__typeof__((p).begin()) it = (p).begin(); it != (p).end(); ++it) {
    int r = it->first.first, l = it->first.second, c = it->second;
    for (; right <= r; ++right) {
      for (int fix = 0; fix <= (int)(right); ++fix) {
        for (int i = right, rem_fix = fix; i >= 0 && rem_fix >= 0;
             --i, --rem_fix)
          chmin(dp2[i][rem_fix], dp[right][fix]);
        chmin(dp2[right + 1][fix], dp2[right][fix]);
      }
    }
    for (int j = 0; j <= (int)(l); ++j)
      chmin(dp[r + 1][j + (r - l + 1)], dp2[l][j] + c);
  }
  long long res = inf;
  for (int i = 0; i <= (int)(n); ++i)
    for (int j = k; j <= n; ++j) chmin(res, dp[i][j]);
  if (res == inf) res = -1;
  cout << res << endl;
}
