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

public static partial class Program
{
    public static void Main()
    {
        var nab = CRL().ArrayInts();
        var n = nab[0];
        var ma = nab[1];
        var mb = nab[2];
        var a = new int[n];
        var b = new int[n];
        var c = new int[n];

        for (int i = 0; i < n; i++)
        {
            var input = CRL().ArrayInts();
            a[i] = input[0];
            b[i] = input[1];
            c[i] = input[2];
        }

        var max = Math.Max(a.Max(), b.Max());

        // dp[i, ca, cb]
        // 1 -> i + 1番目までの薬品の組み合わせで、a == ca, b == cbになる時の最小コスト
        var dp = new int[n + 1, n * max + 1, n * max + 1];
        for (int i = 0; i < n + 1; i++)
        {
            for (int j = 0; j < n * max + 1; j++)
            {
                for (int k = 0; k < n * max + 1; k++)
                {
                    dp[i, j, k] = int.MaxValue;
                }
            }
        }

        dp[0, 0, 0] = 0;

        for (int i = 0; i < n; i++)
        {
            for (int ca = 0; ca < n * max; ca++)
            {
                for (int cb = 0; cb < n * max; cb++)
                {
                    if (dp[i, ca, cb] == int.MaxValue)
                    {
                        continue;
                    }

                    //i + 1番目の薬品を加えない場合
                    dp[i + 1, ca, cb] = Math.Min(dp[i + 1, ca, cb], dp[i, ca, cb]);

                    //i + 1番目の薬品を加える場合
                    dp[i + 1, ca + a[i], cb + b[i]] = Math.Min(dp[i + 1, ca + a[i], cb + b[i]], dp[i, ca, cb] + c[i]);
                }
            }
        }

        var val = int.MaxValue;
        for (int ca = 1; ca < n * max; ca++)
        {
            for (int cb = 1; cb < n * max; cb++)
            {
                if (ca * mb == cb * ma)
                {
                    val = Math.Min(val, dp[n, ca, cb]);
                }
            }
        }

        CWL(val == int.MaxValue ? -1 : val);
    }
}

public static partial class Program
{
    //テンプレここから
    public static int ToInt(this string str) => int.Parse(str);
    public static long ToLong(this string str) => long.Parse(str);
    public static long[] ToLong(this IEnumerable<string> strs) => strs.Select(x => x.ToLong()).ToArray();
    public static int[] ToInt(this IEnumerable<string> strs) => strs.Select(x => x.ToInt()).ToArray();
    public static long[] ArrayLongs(this string str, char opr = ' ') => str.Split(opr).ToLong();
    public static int[] ArrayInts(this string str, char opr = ' ') => str.Split(opr).ToInt();
    public static string CRL() => Console.ReadLine();
    public static void CWL(object obj) => Console.WriteLine(obj);
    public static long Diff(long a, long b) => Math.Abs(Math.Max(a, b) - Math.Min(a, b));
    public static long Sign(this long i) => Math.Sign(i);
    public static bool IsEven(this long i) => i % 2 == 0;
    public static bool IsEven(this int i) => i % 2 == 0;
    public static long[] dx = new long[] {0, -1, 0, 1};
    public static long[] dy = new long[] {-1, 0, 1, 0};
    public static long mod = 1000000007;
    public static string alphabet = "abcdefghijklmnopqrstuvwxyz";
    public static long ToLong(this char c) => c.ToString().ToInt();

    public static long[] Sort(this long[] array)
    {
        var list = array.ToList();
        list.Sort();
        return list.ToArray();
    }

    public static long GCD(long a, long b) => b == 0 ? a : GCD(b, a % b);

    public static long LCM(long a, long b) => a * b / GCD(a, b);
    //テンプレここまで
}

Measured memory_bytes: 36832