from collections import deque





# 数列の点数を計算する関数

def calc(seq):

    score = 0

    for a, b, c, d in req:

        if seq[b - 1] - seq[a - 1] == c:

            score += d



    return score





n, m, q = list(map(int, input().split()))

req = [list(map(int, input().split())) for _ in range(q)]



ans = 0



que = deque()



# 数列の1番目、[1]～[m]までキューに追加しますが、

# 実は、この問題は数列の最初が[1]の場合だけを考えても解けます。

for i in range(1, m + 1):

    que.append([i])



while que:

    seq = que.popleft()



    if len(seq) == n:

        # 長さがnになったので、得点を計算します

        score = calc(seq)

        ans = max(ans, score)

    else:

        # 次に追加する数字は、下限が今の数列の一番後ろの数字、上限がmです

        for i in range(seq[-1], m + 1):

            seq_next = seq + [i]

            que.append(seq_next)



print(ans)

def dfs(seq):

    # 返り値は、すべての数列の得点の最大値 ans です。

    ans = 0

    if len(seq) == n:

        # 数列が完成したので、得点を計算します

        score_ret = 0

        for a, b, c, d in req:

            if seq[b-1] - seq[a-1] == c:

                score_ret += d

        return score_ret  # この数列の得点を返します

    else:

        # まだ数列が完成していません

        for i in range(seq[-1], m + 1):

            seq_next = seq + (i,)  # 長さ1のタプル(i,)を連結します

            score = dfs(seq_next)  # seq_nextから派生するすベての数列の中での、得点の最大値が返ってきます

            ans = max(ans, score)  # 最大の得点を更新します



    # すべてが終わったので、得点の最大値を返します

    return ans





n, m, q = list(map(int, input().split()))

# reqは[[a1,b1,c1,d1],[a2,b2,c2,d2]……]が入ったリストのリストです

req = [list(map(int, input().split())) for _ in range(q)]



# 最終的に答えが返ってくるようにします。処理はすべてdfsメソッドでやってもらいます。

# リストだとどこかで間違えて値を書き換えそうで怖いので、タプルにしておきます

# 1番目が1の場合以外は考えなくていいので、(1,)だけやります

ans = 0

score = dfs((1,))

ans = max(ans, score)

print(ans)

from collections import deque

# 数列の点数を計算する関数
def calc(seq):
    score = 0
    for a, b, c, d in req:
        if seq[b - 1] - seq[a - 1] == c:
            score += d
    return score


n, m, q = list(map(int, input().split()))
req = [list(map(int, input().split())) for _ in range(q)]
ans = 0
que = deque()
# 数列の1番目、[1]～[m]までキューに追加しますが、
# 実は、この問題は数列の最初が[1]の場合だけを考えても解けます。
for i in range(1, m + 1):
    que.append([i])
while que:
    seq = que.popleft()
    if len(seq) == n:
        # 長さがnになったので、得点を計算します
        score = calc(seq)
        ans = max(ans, score)
    else:
        # 次に追加する数字は、下限が今の数列の一番後ろの数字、上限がmです
        for i in range(seq[-1], m + 1):
            seq_next = seq + [i]
            que.append(seq_next)
print(ans)

def dfs(seq):
    # 返り値は、すべての数列の得点の最大値 ans です。
    ans = 0
    if len(seq) == n:
        # 数列が完成したので、得点を計算します
        score_ret = 0
        for a, b, c, d in req:
            if seq[b - 1] - seq[a - 1] == c:
                score_ret += d
        return score_ret  # この数列の得点を返します
    else:
        # まだ数列が完成していません
        for i in range(seq[-1], m + 1):
            seq_next = seq + (i,)  # 長さ1のタプル(i,)を連結します
            score = dfs(seq_next)  # seq_nextから派生するすベての数列の中での、得点の最大値が返ってきます
            ans = max(ans, score)  # 最大の得点を更新します
    # すべてが終わったので、得点の最大値を返します
    return ans


n, m, q = list(map(int, input().split()))
# reqは[[a1,b1,c1,d1],[a2,b2,c2,d2]……]が入ったリストのリストです
req = [list(map(int, input().split())) for _ in range(q)]
# 最終的に答えが返ってくるようにします。処理はすべてdfsメソッドでやってもらいます。
# リストだとどこかで間違えて値を書き換えそうで怖いので、タプルにしておきます
# 1番目が1の場合以外は考えなくていいので、(1,)だけやります
ans = 0
score = dfs((1,))
ans = max(ans, score)
print(ans)

-from collections import deque - -# 数列の点数を計算する関数 -def calc(seq): -    score = 0 -    for a, b, c, d in req: -        if seq[b - 1] - seq[a - 1] == c: -            score += d -    return score +def dfs(seq): +    # 返り値は、すべての数列の得点の最大値 ans です。 +    ans = 0 +    if len(seq) == n: +        # 数列が完成したので、得点を計算します +        score_ret = 0 +        for a, b, c, d in req: +            if seq[b - 1] - seq[a - 1] == c: +                score_ret += d +        return score_ret  # この数列の得点を返します +    else: +        # まだ数列が完成していません +        for i in range(seq[-1], m + 1): +            seq_next = seq + (i,)  # 長さ1のタプル(i,)を連結します +            score = dfs(seq_next)  # seq_nextから派生するすベての数列の中での、得点の最大値が返ってきます +            ans = max(ans, score)  # 最大の得点を更新します +    # すべてが終わったので、得点の最大値を返します +    return ans +# reqは[[a1,b1,c1,d1],[a2,b2,c2,d2]……]が入ったリストのリストです +# 最終的に答えが返ってくるようにします。処理はすべてdfsメソッドでやってもらいます。 +# リストだとどこかで間違えて値を書き換えそうで怖いので、タプルにしておきます +# 1番目が1の場合以外は考えなくていいので、(1,)だけやります -que = deque() -# 数列の1番目、[1]～[m]までキューに追加しますが、 -# 実は、この問題は数列の最初が[1]の場合だけを考えても解けます。 -for i in range(1, m + 1): -    que.append([i]) -while que: -    seq = que.popleft() -    if len(seq) == n: -        # 長さがnになったので、得点を計算します -        score = calc(seq) -        ans = max(ans, score) -    else: -        # 次に追加する数字は、下限が今の数列の一番後ろの数字、上限がmです -        for i in range(seq[-1], m + 1): -            seq_next = seq + [i] -            que.append(seq_next) +score = dfs((1,)) +ans = max(ans, score)