type ABC(stream:System.IO.TextReader) =
  member this.Scan1 f = stream.ReadLine() |> f
  member this.Scan2 f = stream.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1]))
  member this.Scan3 f = stream.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1], a.[2]))
  member this.Scan4 f = stream.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1], a.[2], a.[3]))
  member this.ScanVecH f = stream.ReadLine().Split() |> Array.map f
  member this.ScanVecV n f = [| for i in 1..n -> stream.ReadLine() |> f |]
  member this.ScanMatrix n f  = [ for i in 1..n do yield stream.ReadLine().Split() |> Array.map f ]
  member this.ScanCharMatrix n = [ for i in 1..n -> stream.ReadLine().ToCharArray() ]
  member this.Close () = stream.Close()

let util = ABC(stdin)
let N,M_ = util.Scan2 int
let M = int64 M_
let Xs = util.ScanMatrix N int64 |> List.sortBy (Array.item 0)

let rec rfn cnt price (xs: int64 [] list) =
  match xs with
  | [] -> failwith "somethin wrong"
  | x::xs ->
      let p, n = x.[0], x.[1]
      if n + cnt < M
        then rfn (cnt+n) (price+n*p) xs
        else price + (M-cnt) * p

rfn 0L 0L Xs
