import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.io.File;

public class Euler828 {
    static final long kMod = 1005075251L;

    static long minScoreForTarget(long target, List<Long> nums) {
        int n = nums.size();
        int allMasks = 1 << n;

        long[] subsetSum = new long[allMasks];
        for (int mask = 1; mask < allMasks; ++mask) {
            int bit = Long.numberOfTrailingZeros(mask);
            int prev = mask & (mask - 1);
            subsetSum[mask] = subsetSum[prev] + nums.get(bit);
        }

        List<Set<Long>> vals = new ArrayList<>(allMasks);
        for (int i = 0; i < allMasks; i++)
            vals.add(new HashSet<>());

        for (int mask = 1; mask < allMasks; ++mask) {
            if ((mask & (mask - 1)) == 0) {
                int bit = Long.numberOfTrailingZeros(mask);
                vals.get(mask).add(nums.get(bit));
                continue;
            }

            for (int sub = (mask - 1) & mask; sub > 0; sub = (sub - 1) & mask) {
                int other = mask ^ sub;
                if (sub > other)
                    continue;

                for (long a : vals.get(sub)) {
                    for (long b : vals.get(other)) {
                        vals.get(mask).add(a + b);
                        vals.get(mask).add(a * b);
                        if (a > b)
                            vals.get(mask).add(a - b);
                        if (b > a)
                            vals.get(mask).add(b - a);
                        if (b != 0 && a % b == 0)
                            vals.get(mask).add(a / b);
                        if (a != 0 && b % a == 0)
                            vals.get(mask).add(b / a);
                    }
                }
            }
        }

        long best = Long.MAX_VALUE;
        for (int mask = 1; mask < allMasks; ++mask) {
            if (vals.get(mask).contains(target)) {
                if (subsetSum[mask] < best) {
                    best = subsetSum[mask];
                }
            }
        }

        return best == Long.MAX_VALUE ? 0 : best;
    }

    public static String solve() {
        String dir = new File("").getAbsolutePath();
        String path = dir + "/resources/documents/0828_number_challenges.txt";

        File f = new File(path);
        if (!f.exists()) {
            // fallback if running strictly inside the solutionsJava folder
            path = dir + "/../resources/documents/0828_number_challenges.txt";
        }

        long ans = 0;
        long p3 = 1;

        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            String line;
            while ((line = br.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty())
                    continue;
                int col = line.indexOf(':');
                if (col == -1)
                    continue;

                long target = Long.parseLong(line.substring(0, col));
                String[] parts = line.substring(col + 1).split(",");
                List<Long> nums = new ArrayList<>();
                for (String p : parts) {
                    nums.add(Long.parseLong(p));
                }

                p3 = (p3 * 3) % kMod;
                long s = minScoreForTarget(target, nums);
                ans = (ans + p3 * (s % kMod)) % kMod;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return Long.toString(ans);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
