#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
 #define int long long
#define all(X) (X).begin(), (X).end()
#define reset(X) memset(X, 0, sizeof(X))
#define mp(a, b) make_pair(a, b)
#define pb push_back
#define endl '\n'
#define fi first
#define se second

 
 
using namespace __gnu_pbds;
using namespace std;
 const int mod=1e9+7;
 // const int mod=998244353;
const int INF=4e18+10;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
#define read(n) int n; cin>>n;
#define readv(x, n) vector<int> x(n); for(auto &i:x) cin>>i; 
int multiply(int a, int b, int in_mod){return (a*b)%in_mod;} 
int mult_identity(int a){return 1;}


auto power(auto a, int b, int in_mod)
{
    auto prod=mult_identity(a);
    auto mult=a%in_mod;
    while(b!=0)
    {
        if(b%2)
        {
            prod=multiply(prod,mult, in_mod);
        }
        mult=multiply(mult, mult,in_mod);
        b/=2;
    }
    return prod;
}
int mod_inv(int q, int in_mod)
{

    return power(q, in_mod-2,in_mod);
}

// const int MAXN=5e5+10;
// vector<int> fac(MAXN);
// vector<int> infac(MAXN);
// void build_factorial()
// {
//     fac[0]=1;
//     infac[0]=1;
//     for(int i=1;i<MAXN;i++)
//     {
//         fac[i]=(fac[i-1]*i)%mod;
//         infac[i]=mod_inv(fac[i], mod);
//     }
// }



// void solve()
// {
//     int h, w, n;
//     cin>>h>>w>>n;
//     vector<pair<int, int> > bad;
//     for(int i=0;i<n;i++)
//     {
//         int r, c;
//         cin>>r>>c;
//         bad.pb({r,c});
//     } 
//     sort(all(bad));
//     bad.pb({h, w});



//     int ways[n+1];
//     for(int i=0;i<=n;i++)
//     {

//         ways[i] = (fac[bad[i].fi+bad[i].se-2]*infac[bad[i].fi-1])%mod * infac[bad[i].se-1]%mod;
//         for(int j=0;j<=i;j++)
//         {
//             if(bad[j].fi<=bad[i].fi && bad[j].se<=bad[i].se)
//             {
//                 ways -= 
//             }
//         }
//     }
// }


struct query
{
    int a, b, c, d;
};
int n;
    int   m,q;
vector<int> val;
vector<query> queries;
int dfs(int index)
{
    if(index == n)
    {
        //verify
        int sm=0;
        for(auto q:queries)
        {
            if(val[q.b]-val[q.a]==q.c)
                sm+=q.d;
        }
        return sm;
    }

    int mx=0;
    for(int i=val.back();i<=m;i++)
    {
        val.pb(i);
        mx=max(mx, dfs(index+1));
        val.pop_back();
    }

    return mx;
}
void solve()
{
    cin>>n>>m>>q;
    for(int i=0;i<q;i++)
    {
        int a , b, c, d;
        cin>>a>>b>>c>>d;
        a--;
        b--;
        queries.pb({a, b,c, d});
    }
    val.pb(1);
    cout<< dfs(1 );
}

 
 
signed main()
 
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);  
    cout.tie(NULL);
    #ifndef ONLINE_JUDGE
        if(fopen("INPUT.txt","r"))
        {
            freopen ("INPUT.txt" , "r" , stdin);
            freopen ("OUTPUT.txt" , "w" , stdout);
        }
    #endif
    auto clk=clock(); 
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    // -------------------------------------Code starts here---------------------------------------------------------------------     
 
    int t=1;
    // cin>>t;
    for(int test=1;test<=t;test++)
    {
        // cout<<"Case #"<<test<<": ";
        solve();
        // cout<<endl;
 
    }
 
    // -------------------------------------Code ends here------------------------------------------------------------------
 
 
    clk = clock() - clk;
    cerr << fixed << setprecision(6) << "Time: " << ((double)clk)/CLOCKS_PER_SEC << "\n";
    return 0;
 }


Measured memory_bytes: 3760