object Main {

  def main(args: Array[String]): Unit = {
    val sc = new java.util.Scanner(System.in)

    // タイプAとタイプBの物質の混合比がM_a : M_b
    // A の重さが a の時, Bの重さ b は b = (a * M_b) / M_a { (a * M_b) % M_a == 0 } である必要がある.

    // 最初, dp(i)(a)(b) = Inf としておくと, その最小価格が存在しない時には Infである.
    // 条件を満たす全ての dpが Infなら, 作れないということである。
    // i個の薬品を使って, a, b の重さを作る時の 価格は dp(i)(a)(b) で表せるとすると,
    // i番目の薬品を加える時と加えない時の２種類で更新できる。
    // dp(i)(a)(b) = dp(i-1)(a)(b) // 加えない場合
    // dp(i)(a+A(i))(b+B(i)) = dp(i-1)(a)(b) + C(i)
    val INF = Int.MaxValue / 10
    val N, Ma, Mb = sc.nextInt()
    val amax = 10
    val bmax = 10
    val nmax = 40
    val dp = Array.fill(N+1, nmax*amax+1, nmax*bmax+1)(INF)

    dp(0)(0)(0) = 0

    val A, B, C = new Array[Int](N)
    (0 until N) foreach { i =>
      A(i) = sc.nextInt()
      B(i) = sc.nextInt()
      C(i) = sc.nextInt()
    }

    (0 until N) foreach { i =>
      (0 to nmax*amax - A(i)) foreach { a =>
        (0 to nmax*bmax - B(i)) foreach { b =>
          dp(i+1)(a)(b) = Math.min(dp(i+1)(a)(b), dp(i)(a)(b))
          dp(i+1)(a + A(i))(b + B(i)) = Math.min(dp(i+1)(a + A(i))(b + B(i)), dp(i)(a)(b) + C(i))
        }
      }
    }

    var min = INF
    (1 until nmax*amax) foreach { a =>
      (1 until nmax*bmax) foreach { b =>
        if (a * Mb == b * Ma)
          min = Math.min(min, dp(N)(a)(b))
      }
    }

    println(if (min == INF) -1
    else min)
  }
}