#include  < iostream >
#include 
< algorithm >
using   namespace  std;
int  l,n,b;
// int x,w,f,c;
int  F[ 1001 ][ 10001 ];
const   int  INF = 10000000 ;
struct  node
{
    
int  x;
    
int  w;
    
int  f;
    
int  c;
};
node Q[
10001 ];
bool cmp(node a,node b)
{
    
if (a.x < b.x)
        
return   1 ;
    
return   0 ;
}
void  dp()
{
    
int  i,j,k;
     for (k = 0 ;k < n;k ++ )
    {
        i
= Q[k].w + Q[k].x;
        
for (j = b;j >= Q[k].c;j -- )
        {
            
if (F[i][j] < F[i - Q[k].w][j - Q[k].c] + Q[k].f)
                F[i][j]
= F[i - Q[k].w][j - Q[k].c] + Q[k].f;
        }
    }
        
return  ;
}
void  init()
{
    
int  i,j;
    
for ( i = 0 ;i <= b;i ++ )
    {
        F[
0 ][i] = 0 ;
    }
    
for (j = 1 ;j <= l;j ++ )
       
for (i = 1 ;i <= b;i ++ )
            F[j][i]
=- INF;
}
int  main()
{
    scanf(
" %d%d%d " , & l, & n, & b);
    init();
    
for ( int  i = 0 ;i < n;i ++ )
        scanf(
" %d%d%d%d " , & Q[i].x, & Q[i].w, & Q[i].f, & Q[i].c);
    sort(Q,Q
+ n,cmp);
    dp();
    
if (F[l][b] > 0 )
    printf(
" %d\n " ,F[l][b]);
    
else
        printf(
" -1\n " );
    
return   0 ;
}