#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define per(i, a, b) for(int i=(b)-1; i>=(a); i--)
#define sz(a) (int)a.size()
#define de(a) cout << #a << " = " << a << endl
#define dd(a) cout << #a << " = " << a << " "
#define all(a) a.begin(), a.end()
#define pw(x) (1ll<<(x))
#define endl "\n"
typedef double db;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int mod = 1e9 + 7;
int a[1000000 + 10], A[1000000 + 10], inv[1000000 + 10], res[1000000 + 10];
int dp[5050][5050], dp1[5050][5050];
ll qpow(ll a, ll b){
	ll res = 1;
	while(b){
		if(b & 1){
			res = res * a % mod;
		}
		b >>= 1;
		a = a * a % mod;
	}
	return res;
}
// int get(int a, int b){
// 	if(a < b) return 0;
// 	return mul(mul(A[a], inv[b]), inv[a - b]);
// }
int mul(int a, int b){
	return (ll)a * b % mod;
}
int add(int a, int b){
	if(a + b >= mod) return a + b - mod;
	return a + b;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	//cout << setiosflags(ios::fixed);
	//cout << setprecision(2);
	int n, k, q;
	cin >> n >> k >> q;
	rep(i ,1, n + 1) cin >> a[i];
	// A[0] = inv[0] = 1;
	// rep(i, 1, 1000000 + 1){
	// 	A[i] = mul(A[i - 1], i);
	// 	inv[i] = qpow(A[i], mod - 2);
	// }
	rep(i, 1, n + 1) dp[0][i] = 1;
	rep(i, 1, k + 1){
		rep(j, 1, n + 1){
			//de(dp[0][0]);
			dp[i][j] = add(dp[i - 1][j + 1], dp[i - 1][j - 1]);
		//	dd(i);dd(j);de(dp[i][j]);
		}
	}
	rep(i, 0, n + 1){
		//dd(i);
		//de(dp[k][i]);
	}
	rep(i, 1, n + 1){
		rep(j, 0, k + 1){
			res[i] = add(res[i], mul(dp[j][i], dp[k - j][i]));
		}
	}
	int sum = 0;
	rep(i, 1, n + 1){
		//de(res[i]);
		sum = add(sum, mul(res[i], a[i]));
	}
	while(q --){
		int x, y;
		cin >> x >> y;
		sum = add(sum, -mul(res[x], a[x]) + mod);
		a[x] = y;
		sum = add(sum, mul(res[x], a[x]));
		cout << sum << endl;
	}
	return 0;
}