#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <functional>
#include <iostream>
#define fi first
#define sc second
using namespace std;
typedef long long ll;

typedef pair<int,int> P;
typedef pair<int,P> PP;
int n,m,l;
vector<PP> G[50];
int dp[51][51];

int main(void){
	scanf("%d%d%d",&n,&m,&l);
	for(int i=0;i<m;i++){
		int d,a,k,t;
		scanf("%d%d%d%d",&d,&a,&k,&t);
		int from=d*n+a-1;
		int to=d*n+a+k-1;
		G[from].push_back(PP(to,P(t,1)));
	}
	for(int i=0;i<5*n;i++){
		G[i].push_back(PP(i+1,P(0,0)));
	}
	int res=0;
	for(int i=0;i<5*n;i++){
		for(int j=0;j<l;j++){
			for(int k=0;k<G[i].size();k++){
				PP p=G[i][k];
				dp[p.fi][j+p.sc.sc]=max(dp[p.fi][j+p.sc.sc],dp[i][j]+p.sc.fi);
				res=max(res,dp[p.fi][j+p.sc.sc]);
			}
		}
	}
	printf("%d\n",res);
	return 0;
}