#include <bits/stdc++.h>
#define rep(i, n) for (ll i = 0; i < (ll)(n); ++i)
#define rep2(i, s, n) for (ll i = s; i < (ll)(n); i++)
#define repr(i, n) for (ll i = n; i >= 0; i--)
#define pb push_back
#define COUT(x) cout << (x) << "\n"
#define COUTF(x) cout << setprecision(15) << (x) << "\n"
#define ENDL cout << "\n"
#define DF(x) x.erase(x.begin())  // 先頭文字削除
#define ALL(x) x.begin(), x.end()
#define SZ(x) (ll) x.size()
#define SORT(x) sort(ALL(x))
#define REVERSE(x) reverse(ALL(x))
#define MAX(x, y, z) max(x, max(y, z))
#define MIN(x, y, z) min(x, min(y, z))
#define ANS cout << ans << "\n"
#define RETURN(x)    \
  cout << x << "\n"; \
  return 0
clock_t CLOCK;
#define START_TIMER CLOCK = clock()
#define SHOW_TIMER cerr << "time: " << (ld)(clock() - CLOCK) / 1000000 << "\n"
#define init() \
  cin.tie(0);  \
  ios::sync_with_stdio(false)
#define LINE cerr << "[debug] line: " << __LINE__ << "\n";
#define debug(x) cerr << "[debug] " << #x << ": " << x << "\n";
#define debugV(v)                       \
  cerr << "[debugV] " << #v << ":";     \
  rep(i, v.size()) cerr << " " << v[i]; \
  cerr << "\n";
using namespace std;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using mll = map<ll, ll>;
using qll = queue<ll>;
using P = pair<ll, ll>;

constexpr ll INF = 0x3f3f3f3f3f3f3f3f;
constexpr ld PI = 3.141592653589793238462643383279;
ll get_digit(ll x) {
  return to_string(x).size();
}

ll gcd(ll x, ll y) {
  return y ? gcd(y, x % y) : x;
}

ll lcm(ll a, ll b) {
  return a / gcd(a, b) * b;
}

vector<P> factorize(ll n) {
  vector<P> result;
  for (ll i = 2; i * i <= n; ++i) {
    if (n % i == 0) {
      result.pb({i, 0});
      while (n % i == 0) {
        n /= i;
        result.back().second++;
      }
    }
  }
  if (n != 1) {
    result.pb({n, 1});
  }
  return result;
}

vll divisor(ll n) {
  vll ret;
  for (ll i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n) ret.push_back(n / i);
    }
  }
  SORT(ret);
  return (ret);
}

signed main() {
  init();
  ll D;
  cin >> D;
  vll C(26);
  rep(i, 26) cin >> C[i];
  vvll S(D, vll(26));
  rep(i, D) rep(j, 26) cin >> S[i][j];
  vll last(26, 0);
  ll a = 0;
  vll ans_array(D);
  vll T(D);  // その日に行ったコンテスト

  auto calc = [&]() -> ll {
    vll la(26, 0);
    ll res = 0;
    rep(i, D + 1) {
      if (i == 0) continue;
      ll t = T[i - 1];
      res += S[i - 1][t];
      la[t] = i;
      rep(j, 26) {
        res -= C[j] * (i - la[j]);
      }
    }
    return res;
  };

  rep(i, D + 1) {
    if (i == 0) continue;
    ll t;
    cin >> t;
    t--;
    T[i - 1] = t;
    a += S[i - 1][t];
    last[t] = i;
    rep(j, 26) {
      a -= C[j] * (i - last[j]);
    }
    ans_array[i - 1] = a;
    // debug(a);
  }

  // ll ans = ans_array[D - 1];
  // debug(ans);

  ll M;
  cin >> M;
  rep(i, M) {
    ll d, q;
    cin >> d >> q;
    d--;
    q--;

    T[d] = q;

    ll ns = calc();
    COUT(ns);

    // // 満足度の上昇を修正
    // ll sa = S[d][q] - S[d][T[d]];
    // ans += sa;

    // // 前に開催していたコンテスト
    // ll before_q = T[d];

    // // 引いてきた分を戻す
    // rep2(j, d + 1, D) {
    //   if (T[j] == before_q) break;
    //   ans += C[before_q] * (j - d);
    // }

    // // 引き直す
    // rep2(j, d, D) {
    //   if (T[j] == before_q) break;
    //   ans -= C[before_q] * (j - d);
    // }

    // // 新しいタイプの分で引いていく
    // rep2(j, d + 1, D) {
    //   if (T[j] == q) break;
    //   ans -= C[q] * (j - d);
    // }

    // T[d] = q;
    // COUT(ans);
  }

  return 0;
}

Measured memory_bytes: 3760