#include <bits/stdc++.h>

using namespace std;

struct edge
{
  int to, cost;
};

int main()
{
  int N, M, L;
  vector< edge > g[41];
  cin >> N >> M >> L;
  for(int i = 0; i < M; i++) {
    int d, a, k, t;
    cin >> d >> a >> k >> t;
    --a;
    g[d * N + a].push_back((edge){d * N + a + k, t});
  }

  int dp[41][41] = {{}};
  int ret = 0;
  for(int i = 0; i <= 5 * N; i++) {
    for(int j = 0; j < L; j++) {
      if(i > 0) dp[j][i] = max(dp[j][i], dp[j][i - 1]);
      for(auto& e : g[i]) {
        dp[j + 1][e.to] = max(dp[j + 1][e.to], dp[j][i] + e.cost);
        ret = max(ret, dp[j + 1][e.to]);
      }
    }
  }
  cout << ret << endl;
}