import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
   public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // Budget
        int m = scanner.nextInt(); // Total number of items
        n /= 10; // Since all prices are multiples of 10, we can scale down

        List<List<Item>> groups = new ArrayList<>();
        Item[] items = new Item[m + 1]; // Items are 1-based indexed

        for (int i = 1; i <= m; i++) {
            int v = scanner.nextInt() / 10;
            int w = scanner.nextInt();
            int q = scanner.nextInt();
            items[i] = new Item(v, w, q);
            if (q == 0) {
                List<Item> group = new ArrayList<>();
                group.add(items[i]);
                groups.add(group);
            }
        }

        // Process attachments and add them to their respective main items
        for (int i = 1; i <= m; i++) {
            if (items[i].q > 0) {
                Item mainItem = items[items[i].q];
                for (List<Item> group : groups) {
                    if (group.get(0) == mainItem) {
                        if (group.size() < 3) { // A main item can have at most two attachments
                            group.add(items[i]);
                        }
                        break;
                    }
                }
            }
        }

        int[] dp = new int[n + 1];

        for (List<Item> group : groups) {
            Item main = group.get(0);
            int v = main.v;
            int w = main.v * main.w;

            // Collect all possible combinations of the main item and its attachments
            List<int[]> combinations = new ArrayList<>();
            combinations.add(new int[]{v, w});

            if (group.size() > 1) {
                Item a1 = group.get(1);
                combinations.add(new int[]{v + a1.v, w + a1.v * a1.w});
                if (group.size() > 2) {
                    Item a2 = group.get(2);
                    combinations.add(new int[]{v + a2.v, w + a2.v * a2.w});
                    combinations.add(new int[]{v + a1.v + a2.v, w + a1.v * a1.w + a2.v * a2.w});
                }
            }

            // Update the dp array by considering each combination
            for (int i = n; i >= 0; i--) {
                for (int[] combo : combinations) {
                    int cost = combo[0];
                    int value = combo[1];
                    if (i >= cost) {
                        dp[i] = Math.max(dp[i], dp[i - cost] + value);
                    }
                }
            }
        }

        System.out.println(dp[n] * 10); // Scale back up the result
    }

    static class Item {
        int v; // Price (scaled down by 10)
        int w; // Importance
        int q; // Main item ID (0 if it's a main item)

        Item(int v, int w, int q) {
            this.v = v;
            this.w = w;
            this.q = q;
        }
    }
}