program scoazze; 
(*algoritmo greedy: Pertanto, ogni giorno in cui riceviamo spazzatura, *)
(*se siamo costretti a svuotare il cestino attuale, lo faremo, altrimenti *)
(*aggiungendo alla dimensione del cestino la quantità di spazzatura raccolta *)
(*nel passaggio corrente.Al termine svuotiamo tutti i cassonetti. *)
(*Dobbiamo svuotare ciascun contenitore il più tardi possibile per ridurre al minimo*)
(*la spesa*)
const
    MAXN = 200000;

{ input data }
var
    N, K, i  : longint;
    costototale, D:int64;
    C,T,Q,diff,price        : array[0..MAXN-1] of int64;

begin
{
    uncomment the following lines if you want to read/write from files
    assign(input,  'input.txt');  reset(input);
    assign(output, 'output.txt'); rewrite(output);
}

    { read numbers N and K in a single line }
    readln(N, K);
    { read all numbers C[i] in the next line }
    for i:=0 to N-1 do
              begin
               read(C[i]);
               diff[i]:=C[i];
               price[i]:=0;
             end;  
    readln();
    costototale:=0;
    for i:=0 to K-1 do
                  begin
                    read(T[i],Q[i]); readln;
                    D:= diff[T[i]]-Q[i];
                    if D>=0 then begin diff[T[i]]:=D; price[T[i]]:=price[T[i]]+diff[T[i]]; end
                            else
                               begin
                                 price[T[i]]:=price[T[i]]+diff[T[i]];
                                 diff[T[i]]:=C[T[i]]-Q[i];
                               end; 
                    write(price[T[i]]); writeln;          
                  end;              
    for i:=0 to N-1 do costototale:=costototale+price[i];
    writeln(costototale);
    for i:=0 to N-1 do write(price[i],' '); writeln;
end.
