let scan_int () = Scanf.scanf " %d" (fun x -> x)
let scan_array len read_func = Array.init len (fun _ -> read_func())
let print_int n = Printf.printf "%d\n" n

let rec calc_bit i n ret =
  if i = n then ret
  else
    let c = scan_int() in
    calc_bit (i+1) n (ret lor (1 lsl (c-1)))

let rec input i n arr =
  if i = n then arr
  else
    let a = scan_int() and b = scan_int() in
    let c = calc_bit 0 b 0 in
    let _ = arr.(i) <- (a, c) in
    input (i+1) n arr

let rec dp table i n m arr =
  if i = m then table.((1 lsl n) - 1)
  else
    let a, c = arr.(i) in
    let rec update_dp_table j n a c =
      if j = n then ()
      else
        let _ = table.(j lor c) <- min table.(j lor c) (table.(j) + a) in
        update_dp_table (j+1) n a c in
    let _ = update_dp_table 0 (1 lsl n) a c in
    dp table (i+1) n m arr


let max_cost = int_of_float 1e15

let () = 
  let n = scan_int() and m = scan_int() in
  let arr = Array.make m (0, 0) and dp_table = Array.make (1 lsl n) max_cost in
  let _ = dp_table.(0) <- 0 in
  let _ = input 0 m arr in
  let ret = dp dp_table 0 n m arr in
  if ret = max_cost then print_int (-1)
  else print_int ret
  