program scoring
    implicit none
    integer(8)::D,C(26),last(26,365),i,j,k,M
    integer(8),allocatable::S(:,:),T(:),V(:),Q(:,:)
    read*,D,C
    allocate(S(26,D))
    allocate(T(D))
    allocate(V(D))
    read*,S,T
    read*,M
    allocate(Q(2,M))
    read*,Q
    
    V=0!各日にちの得点
    last=0

    !初期得点の計算
    do i=1,D
        !前日分を引き継ぎ
        if(i>=2)last(:,i)=last(:,i-1)

        if(i==1)then
            V(i)=V(i)
        else
            V(i)=V(i-1)
        end if
        V(i)=V(i)+S(T(i),i)
        last(T(i),i)=i
        do j=1,26
            V(i)=V(i)-C(j)*(i-last(j,i))
        end do
    end do

    !クエリ処理
    !Q(1,i)日目に行うコンテストをQ(2,i)に変更する 
    do i=1,M
        !lastの書き換え
        if(Q(1,i)==1)then
            last(T(Q(1,i)),1)=0
            last(Q(2,i),1)=1
        else
            last(T(Q(1,i)),Q(1,i))=last(T(Q(1,i)),Q(1,i)-1)
            last(Q(2,i),Q(1,i))=Q(1,i)
        end if
        !日付に対応するコンテストタイプの書き換え
        T(Q(1,i))=Q(2,i)

        !Q(1,i)日目の得点の再計算
        if(Q(1,i)==1)then
            V(Q(1,i))=0
        else
            V(Q(1,i))=V(Q(1,i)-1)
        end if
        V(Q(1,i))=V(Q(1,i))+S(T(Q(1,i)),Q(1,i))
        do j=1,26
            V(Q(1,i))=V(Q(1,i))-C(j)*(Q(1,i)-last(j,Q(1,i)))
        end do

        !Q(1,i)日目以降の得点の再計算
        do j=Q(1,i)+1,D
            last(:,j)=last(:,j-1)
            V(j)=V(j-1)
            V(j)=V(j)+S(T(j),j)
            last(T(j),j)=j
            do k=1,26
                V(j)=V(j)-C(k)*(j-last(k,j))
            end do
        end do
        print'(i0)',V(D)
    end do
end program scoring