#include <bits/stdc++.h>
#define rep(i, n) for (ll i = 0; i < (ll)n; i++)
#define rep1(i, n) for (ll i = 1; i <= (ll)n; i++)
#define PI 3.14159265358979323846
#define vll vector<long long>
#define vvll vector<vector<long long>>
#define pll pair<long long, long long>
using namespace std;
using ll = long long;
using ld = long double;

// グローバル変数（入力）
ll d, c[26], s[365][26], t[365],sc[365], last[26];

void input() {
  cin >> d;
  rep(i, 26) { cin >> c[i]; }
  rep(i, d) {
    rep(j, 26) { cin >> s[i][j]; }
  }
  rep(i, d) {
    ll T;
    cin >> T;
    t[i] = T - 1;
  }
}

// satisfactory decrease
ll satDec(ll date, ll con) {
  ll ans = 0;
  rep(i, 26) {
    if (i != con) { ans += c[i] * (date - last[i]); }
  }
  return ans;
}

// コンテストconを選んだときの満足度の変化を計算する
// 26回ループで求まる
ll satChange(ll date, ll con) { return s[date][con] - satDec(date, con); }

// 満足度を1日ごとに計算する
ll calcSat() {
  ll s = 0;
  rep(i, d) {
    last[t[i]] = i;
    s += satChange(i,t[i]);
  }
  return s;
}

void solve() {
  rep(i,26){last[i]=-1;}
  ll sat = calcSat();
  //cout << sat << endl;
  
  // コンテストとその日付をcontest:{日付,日付,...}で保持する
  unordered_map<ll,vll> contests;
  rep(i,d){
    contests[t[i]].push_back(i);
  }
  
  // クエリを処理する
  ll m;
  cin >> m;
  rep(i,m){
    ll cq,q2;
    cin >> cq >> q2;
    cq--;
    q2--;
    ll q1=t[cq];
    /*
    ll befq1=-1,nextq1=d,befq2=-1,nextq2=d;
    for (ll j=cq-1; j>=0; j--){
      if (t[j]==q1){
        befq1=j;
        break;
      }
    }
    for (ll j=cq+1; j<d; j++){
      if (t[j]==q1){
        nextq1=j;
        break;
      }
    }
    for (ll j = cq - 1; j >= 0; j--) {
      if (t[j] == q2) {
        befq2 = j;
        break;
      }
    }
    for (ll j = cq + 1; j < d; j++) {
      if (t[j] == q2) {
        nextq2 = j;
        break;
      }
    }
    */
    /*
    cout << cq << endl;
    cout << q1 << endl;
    cout << q2 << endl;
    cout << befq1 << endl;
    cout << nextq1 << endl;
    cout << befq2 << endl;
    cout << nextq2 << endl;
    */
    
    ll befq1,nextq1,befq2,nextq2;
    auto cq1Iter = lower_bound(contests[q1].begin(),contests[q1].end(),cq);
    // ll befq1,nextq1;
    if (cq1Iter-contests[q1].begin()==0){
      befq1=-1;
    } else {
      befq1=*(cq1Iter-1);
    }
    if (contests[q1].end()-cq1Iter==1){
      nextq1=d;
    } else {
      nextq1=*(cq1Iter+1);
    }
    /*
    cout << befq1 << endl;
    cout << nextq1 << endl;
    */
    
    auto cq2Iter = lower_bound(contests[q2].begin(), contests[q2].end(), cq);
    // ll befq2, nextq2;
    if (cq2Iter - contests[q2].begin() == 0) {
      befq2 = -1;
    } else {
      befq2 = *(cq2Iter-1);
    }
    if (contests[q2].end() - cq2Iter == 0) {
      nextq2 = d;
    } else {
      nextq2 = *cq2Iter;
    }
    contests[q1].erase(cq1Iter);
    contests[q2].insert(cq2Iter,cq);    

    sat = sat - s[cq][q1] - c[q1] * (cq - befq1) * (nextq1 - cq) + s[cq][q2] + 
        c[q2] * (cq - befq2) * (nextq2 - cq);
    cout << sat << endl;
    t[cq]=q2;
  }
  
  /*
  vll aaa = {1,1,1,1,1,2,2,2,2};
  //cout << aaa.begin() << endl;
  cout << lower_bound(aaa.begin(), aaa.end(), 0) - aaa.begin() << endl; // 
  cout << lower_bound(aaa.begin(), aaa.end(), 3) - aaa.begin() << endl; // 
  //cout << aaa.end() << endl;
  */
  
}

int main() {
  input();
  solve();
  return 0;
}


Measured memory_bytes: 3720