#include <bits/stdc++.h>
using std::bitset;
using std::cerr;
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::fixed;
using std::ios_base;
using std::make_pair;
using std::make_tuple;
using std::map;
using std::nth_element;
using std::pair;
using std::queue;
using std::reverse;
using std::set;
using std::sort;
using std::stack;
using std::string;
using std::tuple;
using std::unordered_map;
using std::unordered_set;
using std::vector;
struct __Timestamp {
  ~__Timestamp() {}
} __timestamp;
template <typename T>
void debug(T t) {}
template <typename T, typename... Args>
void debug(T t, Args... args) {}
const int64_t INF = 1e12;
const int N = 305;
int n, m, k;
int64_t dp[N][N];
int64_t w[N][N];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  cin >> n >> m >> k;
  for (int i = 0; i < (int)(n + 1); i++) {
    for (int j = 0; j < (int)(n + 1); j++) {
      dp[i][j] = w[i][j] = INF;
    }
  }
  for (int i = 0; i < (int)(m); i++) {
    int l, r, c;
    cin >> l >> r >> c;
    w[r][l] = std::min(w[r][l], (int64_t)c);
  }
  for (int r = (int)(1); r < (int)(n + 1); r++) {
    for (int l = (int)(1); l < (int)(r + 1); l++) {
      w[r][l] = std::min(w[r][l - 1], w[r][l]);
    }
  }
  dp[0][0] = 0;
  for (int i = (int)(1); i < (int)(n + 1); i++) {
    for (int j = 0; j < (int)(std::min(i, k) + 1); j++) {
      dp[i][j] = std::min(dp[i][j], dp[i - 1][j]);
      for (int t = i; t > i - j; t--) {
        dp[i][j] = std::min(dp[i][j], dp[t - 1][j - (i - t + 1)] + w[i][t]);
      }
    }
  }
  int64_t res = dp[n][k] >= INF ? -1 : dp[n][k];
  cout << res << '\n';
  return 0;
}
