Problem:
Score : 300 points

Problem Statement

Given are positive integers N, M, Q, and Q quadruples of integers ( a_i , b_i , c_i , d_i ).

Consider a sequence A satisfying the following conditions:

A is a sequence of N positive integers.

1 \leq A_1 \leq A_2 \le \cdots \leq A_N \leq M.

Let us define a score of this sequence as follows:

The score is the sum of d_i over all indices i such that A_{b_i} - A_{a_i} = c_i. (If there is no such i, the score is 0.)

Find the maximum possible score of A.

Constraints

All values in input are integers.

2 ≤ N ≤ 10

1 \leq M \leq 10

1 \leq Q \leq 50

1 \leq a_i < b_i \leq N ( i = 1, 2, ..., Q )

0 \leq c_i \leq M - 1 ( i = 1, 2, ..., Q )

(a_i, b_i, c_i) \neq (a_j, b_j, c_j) (where i \neq j)

1 \leq d_i \leq 10^5 ( i = 1, 2, ..., Q )

Input

Input is given from Standard Input in the following format:

N M Q
a_1 b_1 c_1 d_1
:
a_Q b_Q c_Q d_Q

Output

Print the maximum possible score of A.

Sample Input 1

3 4 3
1 3 3 100
1 2 2 10
2 3 2 10

Sample Output 1

110

When A = \{1, 3, 4\}, its score is 110. Under these conditions, no sequence has a score greater than 110, so the answer is 110.

Sample Input 2

4 6 10
2 4 1 86568
1 4 0 90629
2 3 0 90310
3 4 1 29211
3 4 3 78537
3 4 2 8580
1 2 1 96263
1 4 2 2156
1 2 0 94325
1 4 3 94328

Sample Output 2

357500

Sample Input 3

10 10 1
1 10 9 1

Sample Output 3

1

Solution in C# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var inputs = Console.ReadLine().Split(' ').Select(long.Parse).ToArray();
        var n = inputs[0];
        var m = inputs[1];
        var q = inputs[2];

        var list = new List<ABCD>();

        for (int i = 0; i < q; i++)
        {
            var tmp = Console.ReadLine().Split(' ').Select(long.Parse).ToArray();
            var abcd = new ABCD();
            abcd.a = tmp[0];
            abcd.b = tmp[1];
            abcd.c = tmp[2];
            abcd.d = tmp[3];
            list.Add(abcd);
        }

        long ans = 0;

        if(n == 2)
        {

            for(int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    if (i1 > i2) continue;
                    var arr = new long[]{ i1, i2 };
                    long tmp = 0;
                    foreach(var item in list)
                    {
                        if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                    }
                    if (ans < tmp) ans = tmp;
                }
            }

        }else if(n == 3)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        if (i1 > i2) continue;
                        if (i2 > i3) continue;
                        var arr = new long[] { i1, i2, i3 };
                        long tmp = 0;
                        foreach (var item in list)
                        {
                            if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                        }
                        if (ans < tmp) ans = tmp;
                    }
                }
            }

        }
        else if(n == 4)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            if (i1 > i2) continue;
                            if (i2 > i3) continue;
                            if (i3 > i4) continue;
                            var arr = new long[] { i1, i2, i3, i4 };
                            long tmp = 0;
                            foreach (var item in list)
                            {
                                if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                            }
                            if (ans < tmp) ans = tmp;
                        }
                    }
                }
            }

        }
        else if(n == 5)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                if (i1 > i2) continue;
                                if (i2 > i3) continue;
                                if (i3 > i4) continue;
                                if (i4 > i5) continue;
                                var arr = new long[] { i1, i2, i3, i4, i5 };
                                long tmp = 0;
                                foreach (var item in list)
                                {
                                    if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                }
                                if (ans < tmp) ans = tmp;
                            }
                        }
                    }
                }
            }
        }
        else if(n == 6)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                for (int i6 = 1; i6 <= 10; i6++)
                                {
                                    if (i1 > i2) continue;
                                    if (i2 > i3) continue;
                                    if (i3 > i4) continue;
                                    if (i4 > i5) continue;
                                    if (i5 > i6) continue;
                                    var arr = new long[] { i1, i2, i3, i4, i5, i6 };
                                    long tmp = 0;
                                    foreach (var item in list)
                                    {
                                        if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                    }
                                    if (ans < tmp) ans = tmp;
                                }
                            }
                        }
                    }
                }
            }
        }
        else if(n == 7)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                for (int i6 = 1; i6 <= 10; i6++)
                                {
                                    for (int i7 = 1; i7 <= 10; i7++)
                                    {
                                        if (i1 > i2) continue;
                                        if (i2 > i3) continue;
                                        if (i3 > i4) continue;
                                        if (i4 > i5) continue;
                                        if (i5 > i6) continue;
                                        if (i6 > i7) continue;
                                        var arr = new long[] { i1, i2, i3, i4, i5, i6, i7 };
                                        long tmp = 0;
                                        foreach (var item in list)
                                        {
                                            if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                        }
                                        if (ans < tmp) ans = tmp;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        else if(n == 8)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                for (int i6 = 1; i6 <= 10; i6++)
                                {
                                    for (int i7 = 1; i7 <= 10; i7++)
                                    {
                                        for (int i8 = 1; i8 <= 10; i8++)
                                        {
                                            if (i1 > i2) continue;
                                            if (i2 > i3) continue;
                                            if (i3 > i4) continue;
                                            if (i4 > i5) continue;
                                            if (i5 > i6) continue;
                                            if (i6 > i7) continue;
                                            if (i7 > i8) continue;
                                            var arr = new long[] { i1, i2, i3, i4, i5, i6, i7, i8 };
                                            long tmp = 0;
                                            foreach (var item in list)
                                            {
                                                if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                            }
                                            if (ans < tmp) ans = tmp;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        else if(n == 9)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                for (int i6 = 1; i6 <= 10; i6++)
                                {
                                    for (int i7 = 1; i7 <= 10; i7++)
                                    {
                                        for (int i8 = 1; i8 <= 10; i8++)
                                        {
                                            for (int i9 = 1; i9 <= 10; i9++)
                                            {
                                                if (i1 > i2) continue;
                                                if (i2 > i3) continue;
                                                if (i3 > i4) continue;
                                                if (i4 > i5) continue;
                                                if (i5 > i6) continue;
                                                if (i6 > i7) continue;
                                                if (i7 > i8) continue;
                                                if (i8 > i9) continue;
                                                var arr = new long[] { i1, i2, i3, i4, i5, i6, i7, i8, i9 };
                                                long tmp = 0;
                                                foreach (var item in list)
                                                {
                                                    if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                                }
                                                if (ans < tmp) ans = tmp;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        else if(n == 10)
        {
            for (int i1 = 1; i1 <= 10; i1++)
            {
                for (int i2 = 1; i2 <= 10; i2++)
                {
                    for (int i3 = 1; i3 <= 10; i3++)
                    {
                        for (int i4 = 1; i4 <= 10; i4++)
                        {
                            for (int i5 = 1; i5 <= 10; i5++)
                            {
                                for (int i6 = 1; i6 <= 10; i6++)
                                {
                                    for (int i7 = 1; i7 <= 10; i7++)
                                    {
                                        for (int i8 = 1; i8 <= 10; i8++)
                                        {
                                            for (int i9 = 1; i9 <= 10; i9++)
                                            {
                                                for (int i10 = 1; i10 <= 10; i10++)
                                                {
                                                    if (i1 > i2) continue;
                                                    if (i2 > i3) continue;
                                                    if (i3 > i4) continue;
                                                    if (i4 > i5) continue;
                                                    if (i5 > i6) continue;
                                                    if (i6 > i7) continue;
                                                    if (i7 > i8) continue;
                                                    if (i8 > i9) continue;
                                                    if (i9 > i10) continue;
                                                    var arr = new long[] { i1, i2, i3, i4, i5, i6, i7, i8, i9, i10 };
                                                    long tmp = 0;
                                                    foreach (var item in list)
                                                    {
                                                        if (arr[item.b - 1] - arr[item.a - 1] == item.c) tmp += item.d;
                                                    }
                                                    if (ans < tmp) ans = tmp;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        Console.WriteLine(ans);
    }

}

public class ABCD
{
    public long a;
    public long b;
    public long c;
    public long d;
}