import std;

auto input()
{
    return readln().chomp();
}

alias sread = () => readln.chomp();
alias aryread(T = long) = () => readln.split.to!(T[]);

void main()
{
    long N, M;
    scan(N, M);
    // writeln(M);
    auto AB = new long[][](N);
    // writeln(AB);
    foreach (i; 0 .. N)
    {
        AB[i] = aryread();
    }
    // writeln(AB);
    auto ABのソート = sort(AB);
    // writeln(ABのソート);
    long cost;
    long あと何本買うか = M;
    foreach (i; 0 .. N)
    {
        if (ABのソート[i][1] <= あと何本買うか)
        {
            cost += ABのソート[i][0] * ABのソート[i][1];
            あと何本買うか -= ABのソート[i][1];
            // writeln("co1:", cost);
            // writeln("あと何本買うか:", あと何本買うか);
        }
        else if (ABのソート[i][1] >= あと何本買うか)
        {

            cost += ABのソート[i][0] * あと何本買うか;
            // writeln(AB[i][0]);
            あと何本買うか = 0;
            // writeln("co2:", cost);
            // writeln("あと何本買うか:", あと何本買うか);

        }

    }
    writeln(cost);
}

void scan(L...)(ref L A)
{
    auto l = readln.split;
    foreach (i, T; L)
    {
        A[i] = l[i].to!T;
    }
}
