#include <bits/stdc++.h>
using namespace std;
unsigned long long cost[310][310];
unsigned long long dp[310][310];
int ind = 0;
unsigned long long found(int n, int k) {
  if (false) {
    for (int i = 1; i <= ind; ++i) printf("\t");
    printf("Call found(%d,%d)\n", n, k);
  }
  if (n == 0 || k == 0) {
    if (false) {
      for (int i = 1; i <= ind; ++i) printf("\t");
      printf("%d %d return 0\n", n, k);
    }
    return 0;
  }
  unsigned long long mn = 0x1f1f1f1f1f1f1f1fu;
  for (int i = k; i <= n; ++i) {
    if (dp[n][i] == 0x1f1f1f1f1f1f1f1fu) {
      unsigned long long m = 0x1f1f1f1f1f1f1f1fu;
      for (int j = 1; j <= i; ++j) {
        unsigned long long r;
        if (dp[n - j][i - j] != 0x1f1f1f1f1f1f1f1fu) {
          r = dp[n - j][i - j] + cost[n - (j - 1)][n];
        } else {
          r = found(n - j, i - j) + cost[n - (j - 1)][n];
        }
        m = (((m) < (r)) ? (m) : (r));
      }
      dp[n][i] =
          (((dp[n][i]) < ((((dp[n - 1][i]) < (m)) ? (dp[n - 1][i]) : (m))))
               ? (dp[n][i])
               : ((((dp[n - 1][i]) < (m)) ? (dp[n - 1][i]) : (m))));
    }
    mn = (((mn) < (dp[n][i])) ? (mn) : (dp[n][i]));
  }
  return (((dp[n][k]) < (mn)) ? (dp[n][k]) : (mn));
}
int main() {
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  memset(cost, 0x1f, sizeof(cost));
  memset(dp, 0x1f, sizeof(dp));
  for (int i = 1; i <= m; ++i) {
    int l, r;
    unsigned long long c;
    scanf("%d %d %llu", &l, &r, &c);
    for (int j = l; j <= r; ++j)
      cost[j][r] = (((cost[j][r]) < (c)) ? (cost[j][r]) : (c));
  }
  for (int i = 0; i <= 300; ++i) {
    dp[i][0] = 0;
    cost[i][0] = 0;
  }
  if (false || false) {
    cout << "\t";
    for (int i = 1; i <= n; ++i) {
      cout << i << "\t";
    }
    cout << "\n";
    for (int i = 1; i <= n; ++i) {
      cout << i << "\t";
      for (int j = 1; j <= n; ++j) {
        if (cost[i][j] == 0x1f1f1f1f1f1f1f1fu)
          cout << "INF\t";
        else
          cout << cost[i][j] << "\t";
      }
      cout << "\n";
    }
  }
  for (long long i = 1; i <= n; i++)
    for (long long j = 1; j <= k && j <= i; j++) {
      dp[i][j] = dp[i - 1][j];
      for (long long kk = 1; kk <= j; kk++)
        if (dp[i][j] > dp[i - kk][j - kk] + cost[i - kk + 1][i])
          dp[i][j] = dp[i - kk][j - kk] + cost[i - kk + 1][i];
    }
  if (false || false) {
    cout << "\t";
    for (int i = 1; i <= n; ++i) {
      cout << i << "\t";
    }
    cout << "\n";
    for (int i = 1; i <= n; ++i) {
      cout << i << "\t";
      for (int j = 1; j <= n; ++j) {
        if (dp[i][j] == 0x1f1f1f1f1f1f1f1fu)
          cout << "INF\t";
        else
          cout << dp[i][j] << "\t";
      }
      cout << "\n";
    }
  }
  if (dp[n][k] == 0x1f1f1f1f1f1f1f1fu) {
    printf("-1\n");
  } else {
    printf("%I64d\n", dp[n][k]);
  }
  return 0;
}
