#include <stdio.h>
#include <stdlib.h>

int N,M,Q;
// Nは配列の個数
// Mは配列の要素の最大値
int a[50];
int b[50];
int c[50];
int d[50];

int array[10];

int score(){
    int sum = 0;
    for(int i = 0; i < Q;i ++){
        //printf("sum %d - %d = %d\n",array[b[i]-1],array[a[i]-1],array[c[i]-1]);
        if(array[b[i]-1] - array[a[i]-1] == c[i]){
            sum = sum + d[i];
        }
    }
    return sum;
}

void view_array(){
    for(int i = 0; i < N;i++){
        printf("%d ",array[i]);
    }
    printf("\n");
}

int main(void) {

    scanf("%d %d %d",&N,&M,&Q);
    for(int i = 0; i < Q;i ++){
        scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
    }

    //配列の作成
    // 初期化
    
    /*
    for(int j = 1;j <= M;j++){
        for(int i = 0; i < N;i++){
            array[i] = j;
        }

        view_array();
    
        int pos = N-1;
        while(pos > 0){
            while(array[pos] < M){
                array[pos]++;
                view_array();
            }
            pos--;
        }
    }
    */
    int max_score = 0;

    for(int i = 0; i < N;i++){
        array[i] = 1;
    }
   
    while(1){       

        int c = N-1;
        for(int f = 0; f < N-1;f++){
            if(array[f + 1] >= array[f]){
                c--;
            }
        }
        if(c == 0){
            //view_array();
            int temp = score();
            if(temp >= max_score){
                max_score = temp;
            }
            //printf("score %d\n",temp);
        } 

        array[0]++;
        
        for(int i = 0;i < N-1;i++){
            if(array[i] > M){
                array[i] = 1;
                array[i + 1]++;
            }
        }

        // 終了条件
        int o = N;
        for(int i = 0; i < N;i++){
            if(array[i] == M)o--;
        }
        if(o == 0)break;
    }   

    printf("%d\n",max_score);
    
    return 0;
}
