#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int INF = 1e9;
const ll LINF = 1e18;
inline ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
inline ll lcm(ll a, ll b) { return a / gcd(a, b)*b; }
template<class S,class T> ostream& operator << (ostream& out,const pair<S,T>& o){ out << "(" << o.first << "," << o.second << ")"; return out; }
template<class T> ostream& operator << (ostream& out,const vector<T>& V){ for(int i = 0; i < V.size(); i++){ out << V[i]; if(i!=V.size()-1) out << " ";} return out; }
template<class T> ostream& operator << (ostream& out,const vector<vector<T> >& Mat){ for(int i = 0; i < Mat.size(); i++) { if(i != 0) out << endl; out << Mat[i];} return out; }
template<class S,class T> ostream& operator << (ostream& out,const map<S,T>& mp){ out << "{ "; for(auto it = mp.begin(); it != mp.end(); it++){ out << it->first << ":" << it->second; if(mp.size()-1 != distance(mp.begin(),it)) out << ", "; } out << " }"; return out; }
template<typename T>vector<T> make_v(size_t a){return vector<T>(a);}
template<typename T,typename... Ts>auto make_v(size_t a,Ts... ts){return vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...));}
template<typename T,typename V> typename enable_if<is_class<T>::value==0>::type fill_v(T &t,const V &v){t=v;}
template<typename T,typename V> typename enable_if<is_class<T>::value!=0>::type fill_v(T &t,const V &v){for(auto &e:t) fill_v(e,v);}
/*
 <url:>
 問題文============================================================
 =================================================================
 解説=============================================================
 ================================================================
 */

int D;
vector<ll> c(27);
vector<vector<ll>> s;
vector<int> last;
set<int> st[27],rst[27];
ll sum_s;

void update_happy(ll& happy,int d,int t){
    happy += s[d][t];
    last[t] = d;
    for(int i = 1; i <= 26;i++){
        happy -= c[i]*(d-last[i]);
    }
    return;
}
ll check_happy(ll happy,int d,int t){
    int pre_d = last[t];
    happy += s[d][t];
    
    last[t] = d;
    for(int i = 1; i <= 26;i++){
        happy -= c[i]*(d-last[i]);
    }
    last[t] = pre_d;
    
    return happy;
}
ll calc_happy(vector<int>& sol){
    ll happy = 0;
    for(int d = 1; d <= D; d++){
        update_happy(happy, d, sol[d-1]);
    }
    return happy;
}

void read_parameters(){
    cin >> D;
    for(int t = 1; t <= 26; t++){
        cin >> c[t];
    }
    s.resize(D+1,vector<ll>(27));
    for(int d = 1; d <= D; d++){
        for(int t = 1; t <= 26;t++){
            cin >> s[d][t];
        }
    }
    last.resize(27);
}

vector<int> greedy(){
    ll happy = 0;
    vector<int> sol;
    for(int d = 1; d <= D; d++){
        ll max_v = numeric_limits<ll>::min();
        int target_t = -1;
        
        for(int t = 1; t <= 26; t++){
            ll tmp_happy = check_happy(happy, d, t);
            if(tmp_happy > max_v){
                max_v = tmp_happy;
                target_t = t;
            }
        }
        
        sol.emplace_back(target_t);
    }
    return sol;
}


void set_init(vector<int>& sol){
    for(int t = 1; t <= 26; t++){
        st[t].emplace(0);
        rst[t].emplace(-0);
        
        st[t].emplace(D+1);
        rst[t].emplace(-(D+1));
    }
    for(int d = 1; d <= D;d++){
        st[sol[d-1]].emplace(d);
        rst[sol[d-1]].emplace(-d);
    }
    
    sum_s = 0;
    for(int d = 1; d <= D; d++){
        sum_s += s[d][sol[d-1]];
    }
}

// d日目に行うコンテストのタイプをqに変更
ll query(int d,int q,vector<int>& sol){
    ll mod_happy = 0;
    
    if(sol[d-1] == q) return mod_happy;

    mod_happy -= s[d][sol[d-1]];
    mod_happy += s[d][q];
    
    ll t = -1;
    
    {
        t = sol[d-1];
        ll ld = -(*rst[t].upper_bound(-d));
        ll rd = *st[t].upper_bound(d);

        {
            ll diff = d-ld-1;

            mod_happy += c[t]*diff*(diff+1)/2;
        }
        {
            ll diff = rd-d-1;

            mod_happy += c[t]*diff*(diff+1)/2;
        }
        {
            ll diff = rd-ld-1;
            mod_happy -= c[t]*diff*(diff+1)/2;
            
        }
        
        {
            st[t].erase(d);
            rst[t].erase(-d);
        }
    }
    
    {
        t = q;
        ll ld = -(*rst[t].upper_bound(-d));
        ll rd = *st[t].upper_bound(d);
        
        {
            ll diff = rd-ld-1;
            mod_happy += c[t]*diff*(diff+1)/2;
        }
        
        {
            ll diff = d-ld-1;
            mod_happy -= c[t]*diff*(diff+1)/2;
        }
        {
            ll diff = rd-d-1;
            mod_happy -= c[t]*diff*(diff+1)/2;
        }
        
        {
            st[t].emplace(d);
            rst[t].emplace(-d);
        }
    }
    
    sol[d-1] = q;
    return mod_happy;
}
template<class Type>
Type solve(Type res = Type()){
    read_parameters();
    // greedy();
    
    // auto sol = greedy();
    vector<int> sol(D);
    for(int i = 0; i < D;i++) cin >> sol[i];
    ll happy = calc_happy(sol);
    set_init(sol);
    
    int M; cin >> M;
    while(M--){
        int d,q; cin >> d >> q;
        
        ll mod_happy = query(d, q, sol);
        happy += mod_happy;
        
        cout << happy << endl;
    }
    return res;
}
int main(void) {
    cin.tie(0); ios_base::sync_with_stdio(false);
    solve(0);
    return 0;
}


Measured memory_bytes: 3724