#pragma comment(linker, "/STACK:256777216")
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <bitset>
#include <stack>
#include <deque>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <math.h>
#include <chrono>
#include <cmath>
#include <climits>
#include <ctime>
#include <random>
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;

#define forx(_name,_from, to, value) for (int name = from; name < to; name += value)
#define rforx(_name, from, to, value) for (int name = from; name > to; name -= _value)
#define all(_STL_NAME) _STL_NAME.begin(), _STL_NAME.end()
#define rall(_STL_NAME) _STL_NAME.rbegin(), _STL_NAME.rend()
#define mp(_FIRST,_SECOND) make_pair(_FIRST,_SECOND)

typedef long long ll;
typedef unsigned long long llu;
typedef long double ld;
const ld eps = 1e-9;
mt19937 rndm;

void start() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cout << setprecision(5);
	cout.setf(ios::fixed);
	string FILENAME = "dice";
	rndm.seed(time(0));
#ifdef _DEBUG
	freopen("input.txt", "rt", stdin);
	freopen("output.txt", "wt", stdout);
#else
	/*freopen((FILENAME + ".in").c_str(), "rt", stdin);
	freopen((FILENAME + ".out").c_str(), "wt", stdout);*/
#endif
}

const int MAX_N = 5e3 + 5;
const int INF = 1e9 + 7;
const int MOD = 1e9 + 7;

int a[MAX_N];
ll cnt[MAX_N];
ll dp1[MAX_N][MAX_N];
ll dp2[MAX_N][MAX_N];

void CalcCnt(int n, int k) {
	for (int i = 0; i < n; ++i) {
		dp1[i][0] = 1;
	}

	for (int j = 1; j <= k; ++j) {
		for (int i = 0; i < n; ++i) {
			if (i > 0) {
				dp1[i][j] = (dp1[i][j] + dp1[i - 1][j - 1]) % MOD;
			}
			if (i < n - 1) {
				dp1[i][j] = (dp1[i][j] + dp1[i + 1][j - 1]) % MOD;
			}
		}
	}

	for (int i = 0; i < n; ++i) {
		for (int j = 0; j <= k; ++j) {
			dp2[i][j] = (dp1[i][j] * dp1[i][k - j]) % MOD;
		}
	}

	for (int i = 0; i < n; ++i) {
		for (int j = 0; j <= k; ++j) {
			cnt[i] = (cnt[i] + dp2[i][j]) % MOD;
		}
	}
}

void solve() {
	int n, k, q;
	cin >> n >> k >> q;
	CalcCnt(n, k);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}

	ll ans = 0;
	for (int i = 0; i < n; ++i) {
		ans = (ans + (a[i] * cnt[i]) % MOD) % MOD;
	}

	for (int i = 0; i < q; ++i) {
		int ii, x;
		cin >> ii >> x;
		--ii;
		ans = (ans - (a[ii] * cnt[ii]) % MOD + MOD) % MOD;
		a[ii] = x;
		ans = (ans + (a[ii] * cnt[ii]) % MOD) % MOD;
		cout << ans << "\n";
	}
}

void multitest() {
	int t;
	cin >> t;
	for (int i = 0; i < t; ++i) {
		solve();
	}
}

int main() {
	start();
	//multitest();
	solve();
	return 0;
}