#include <stdio.h>
int max(int a, int b){
  if(a>b)return a;
  else return b;
}
int a[50][4];
int n,m,q;
int ans=0;

int dfs(int res[], int pt, int max_res){
  if(max_res>m)return 0;
  if(pt==n){//終了条件
    int tmp=0;
    for(int j = 0; j<q; j++){//得点を数える
      if(res[a[j][1]-1]-res[a[j][0]-1]==a[j][2])tmp+=a[j][3];
    }
    ans = max(ans, tmp);
    return ans;
  }
  //ptより大きい数字を選んで再帰、選ばず再帰の二通り
  for(int i=max_res; i<11; i++){
    res[pt]=i;
    dfs(res, pt+1, i);//数字iを選んだら配列の一番後ろを指すptが後ろにずれる
  }
  return ans;
}
int main(){
  int i;
  int res[10];
  int used[10];
  for(i=0;i<10;i++)res[i]=used[i]=0;
  res[0]=used[0]=1;
  scanf("%d %d %d", &n, &m, &q);
  for(i=0;i<q;i++){
    scanf("%d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3]);
  }
  int pt=1;
  printf("%d\n", dfs(res, pt, 1));
  //長さnの整数列を作ってその整数列に対して得点を見ていく漢字の全探索
  return 0;
}