/// Msaa el 5ra
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define F first
#define S second
#define f(i, a, b) for (int i = a; i < b; i++)
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define sz(x) (int)(x).size()
#define mp(x, y) make_pair(x, y)
#define popCnt(x) (__builtin_popcountll(x))
// #define int ll
using ll = long long;
using ii = pair<int, int>;
using ull = unsigned long long;
const int N = 4e5 + 5;
const int M = 4e5 + 5;
const int A = 26;
const int LG = 19;
const int MOD =
// (119 << 23) + 1;
1e9 + 7;
const long double PI = acos(-1);
const long double EPS = 1e-7;
const ll MAX = 1e15;
const int ms = int(1e6) + 20;
using Matrix = array<array<int, 101>, 101>;
// Matrix multiplication
Matrix multiply(const Matrix &a, const Matrix &b, ll m) {
Matrix result;
f(i, 0, m)f(j, 0, m)result[i][j] = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
for (int k = 0; k < m; ++k) {
result[i][j] = (result[i][j] + 1ll * a[i][k] * b[k][j]) % MOD;
}
}
}
return result;
}
vector<Matrix> allPowers;
vector<long long> mul(vector<long long> F, Matrix &Tn, int m) {
reverse(F.begin(), F.end());
vector<long long> result(m, 0);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
result[i] = (result[i] + 1ll * Tn[i][j] * F[j]) % MOD;
}
}
return result;
}
void preprocess(int m) {
Matrix T;
f(i, 0, m)f(j, 0, m)T[i][j] = 0;
for (int i = 0; i < m; ++i) {
T[0][i] = 1; // First row is all ones
}
for (int i = 1; i < m; ++i) {
T[i][i - 1] = 1; // Sub-diagonal is all ones
}
allPowers.push_back(T);
for (int i = 0; i < 60; i++) {
T = allPowers.back();
allPowers.push_back(multiply(T, T, m));
}
}
// Function to compute terms f[n-m], f[n-m+1], ..., f[n-1]
vector<long long> getLastTerms(const vector<long long> &initial, ll n, ll m) {
// Transition matrix
// Exponentiate the transition matrix
// Initial state vector
n -= m;
vector<long long> F = initial;
for (int i = 0; i < 60; i++) {
if (((n >> i) & 1)) {
F = mul(F, allPowers[i], m);
reverse(all(F));
}
}
return F;
}
ll m, n, q;
void doWork() {
cin >> m >> n >> q;
preprocess(m);
vector<ll> init(m);
for (int i = 0; i < m; i++) cin >> init[i], init[i] = (init[i] + MOD) % MOD;
vector<pair<ll, ll>> vec;
f(i, 0, q) {
ll x, y;
cin >> x >> y;
y = (y + MOD) % MOD;
vec.push_back({x, y});
}
sort(all(vec));
if (vec.back().F == n || m == 1) {
cout << vec.back().S << endl;
return;
}
ll last_index = m;
// for (int n=1; n <= 50; n++) {
// cout << n << endl;
// auto p =getLastTerms(init, m + n - last_index, m);
// for (auto x : p) cout << x << " ";
// cout << endl;
// }
for (auto [k, v]: vec) {
auto new_init = getLastTerms(init, (k - last_index - 1) + m, m);
new_init.erase(new_init.begin());
new_init.push_back(v);
init = new_init;
last_index = k;
}
cout << getLastTerms(init, m + n - last_index, m).back() << "\n";
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) {
doWork();
}
}
Ly8vIE1zYWEgZWwgNXJhCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPZmFzdCx1bnJvbGwtbG9vcHMsbm8tc3RhY2stcHJvdGVjdG9yLGZhc3QtbWF0aCIpCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIGYoaSwgYSwgYikgZm9yIChpbnQgaSA9IGE7IGkgPCBiOyBpKyspCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIHJhbGwoYSkgYS5yYmVnaW4oKSwgYS5yZW5kKCkKI2RlZmluZSBzeih4KSAoaW50KSh4KS5zaXplKCkKI2RlZmluZSBtcCh4LCB5KSBtYWtlX3BhaXIoeCwgeSkKI2RlZmluZSBwb3BDbnQoeCkgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKHgpKQovLyAjZGVmaW5lIGludCBsbAoKdXNpbmcgbGwgPSBsb25nIGxvbmc7CnVzaW5nIGlpID0gcGFpcjxpbnQsIGludD47CnVzaW5nIHVsbCA9IHVuc2lnbmVkIGxvbmcgbG9uZzsKCmNvbnN0IGludCBOID0gNGU1ICsgNTsKY29uc3QgaW50IE0gPSA0ZTUgKyA1Owpjb25zdCBpbnQgQSA9IDI2Owpjb25zdCBpbnQgTEcgPSAxOTsKY29uc3QgaW50IE1PRCA9CiAgICAgICAgLy8gKDExOSA8PCAyMykgKyAxOwogICAgICAgIDFlOSArIDc7CmNvbnN0IGxvbmcgZG91YmxlIFBJID0gYWNvcygtMSk7CmNvbnN0IGxvbmcgZG91YmxlIEVQUyA9IDFlLTc7Cgpjb25zdCBsbCBNQVggPSAxZTE1OwoKY29uc3QgaW50IG1zID0gaW50KDFlNikgKyAyMDsKCnVzaW5nIE1hdHJpeCA9IGFycmF5PGFycmF5PGludCwgMTAxPiwgMTAxPjsKCi8vIE1hdHJpeCBtdWx0aXBsaWNhdGlvbgpNYXRyaXggbXVsdGlwbHkoY29uc3QgTWF0cml4ICZhLCBjb25zdCBNYXRyaXggJmIsIGxsIG0pIHsKICAgIE1hdHJpeCByZXN1bHQ7CiAgICBmKGksIDAsIG0pZihqLCAwLCBtKXJlc3VsdFtpXVtqXSA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgKytqKSB7CiAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbTsgKytrKSB7CiAgICAgICAgICAgICAgICByZXN1bHRbaV1bal0gPSAocmVzdWx0W2ldW2pdICsgMWxsICogYVtpXVtrXSAqIGJba11bal0pICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKdmVjdG9yPE1hdHJpeD4gYWxsUG93ZXJzOwoKdmVjdG9yPGxvbmcgbG9uZz4gbXVsKHZlY3Rvcjxsb25nIGxvbmc+IEYsIE1hdHJpeCAmVG4sIGludCBtKSB7CiAgICByZXZlcnNlKEYuYmVnaW4oKSwgRi5lbmQoKSk7CgogICAgdmVjdG9yPGxvbmcgbG9uZz4gcmVzdWx0KG0sIDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07ICsraikgewogICAgICAgICAgICByZXN1bHRbaV0gPSAocmVzdWx0W2ldICsgMWxsICogVG5baV1bal0gKiBGW2pdKSAlIE1PRDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgoKdm9pZCBwcmVwcm9jZXNzKGludCBtKSB7CiAgICBNYXRyaXggVDsKICAgIGYoaSwgMCwgbSlmKGosIDAsIG0pVFtpXVtqXSA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICBUWzBdW2ldID0gMTsgLy8gRmlyc3Qgcm93IGlzIGFsbCBvbmVzCiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG07ICsraSkgewogICAgICAgIFRbaV1baSAtIDFdID0gMTsgLy8gU3ViLWRpYWdvbmFsIGlzIGFsbCBvbmVzCiAgICB9CiAgICBhbGxQb3dlcnMucHVzaF9iYWNrKFQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7CiAgICAgICAgVCA9IGFsbFBvd2Vycy5iYWNrKCk7CiAgICAgICAgYWxsUG93ZXJzLnB1c2hfYmFjayhtdWx0aXBseShULCBULCBtKSk7CiAgICB9Cn0KCi8vIEZ1bmN0aW9uIHRvIGNvbXB1dGUgdGVybXMgZltuLW1dLCBmW24tbSsxXSwgLi4uLCBmW24tMV0KdmVjdG9yPGxvbmcgbG9uZz4gZ2V0TGFzdFRlcm1zKGNvbnN0IHZlY3Rvcjxsb25nIGxvbmc+ICZpbml0aWFsLCBsbCBuLCBsbCBtKSB7CiAgICAvLyBUcmFuc2l0aW9uIG1hdHJpeAoKICAgIC8vIEV4cG9uZW50aWF0ZSB0aGUgdHJhbnNpdGlvbiBtYXRyaXgKCiAgICAvLyBJbml0aWFsIHN0YXRlIHZlY3RvcgoKCiAgICBuIC09IG07CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBGID0gaW5pdGlhbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjA7IGkrKykgewogICAgICAgIGlmICgoKG4gPj4gaSkgJiAxKSkgewogICAgICAgICAgICBGID0gbXVsKEYsIGFsbFBvd2Vyc1tpXSwgbSk7CiAgICAgICAgICAgIHJldmVyc2UoYWxsKEYpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gRjsKfQoKbGwgbSwgbiwgcTsKCnZvaWQgZG9Xb3JrKCkgewoKCiAgICBjaW4gPj4gbSA+PiBuID4+IHE7CiAgICBwcmVwcm9jZXNzKG0pOwoKICAgIHZlY3RvcjxsbD4gaW5pdChtKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSBjaW4gPj4gaW5pdFtpXSwgaW5pdFtpXSA9IChpbml0W2ldICsgTU9EKSAlIE1PRDsKICAgIHZlY3RvcjxwYWlyPGxsLCBsbD4+IHZlYzsKICAgIGYoaSwgMCwgcSkgewogICAgICAgIGxsIHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICB5ID0gKHkgKyBNT0QpICUgTU9EOwogICAgICAgIHZlYy5wdXNoX2JhY2soe3gsIHl9KTsKICAgIH0KICAgIHNvcnQoYWxsKHZlYykpOwogICAgaWYgKHZlYy5iYWNrKCkuRiA9PSBuIHx8IG0gPT0gMSkgewogICAgICAgIGNvdXQgPDwgdmVjLmJhY2soKS5TIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbGwgbGFzdF9pbmRleCA9IG07CiAgICAvLyBmb3IgKGludCBuPTE7IG4gPD0gNTA7IG4rKykgewogICAgLy8gICAgIGNvdXQgPDwgbiA8PCBlbmRsOwogICAgLy8gICAgIGF1dG8gcCA9Z2V0TGFzdFRlcm1zKGluaXQsIG0gKyBuIC0gbGFzdF9pbmRleCwgbSk7CiAgICAvLyAgICAgZm9yIChhdXRvIHggOiBwKSAgICBjb3V0IDw8IHggPDwgIiAiOwogICAgLy8gICAgIGNvdXQgPDwgZW5kbDsKICAgIC8vIH0KICAgIGZvciAoYXV0byBbaywgdl06IHZlYykgewogICAgICAgIGF1dG8gbmV3X2luaXQgPSBnZXRMYXN0VGVybXMoaW5pdCwgKGsgLSBsYXN0X2luZGV4IC0gMSkgKyBtLCBtKTsKICAgICAgICBuZXdfaW5pdC5lcmFzZShuZXdfaW5pdC5iZWdpbigpKTsKICAgICAgICBuZXdfaW5pdC5wdXNoX2JhY2sodik7CiAgICAgICAgaW5pdCA9IG5ld19pbml0OwogICAgICAgIGxhc3RfaW5kZXggPSBrOwogICAgfQoKICAgIGNvdXQgPDwgZ2V0TGFzdFRlcm1zKGluaXQsIG0gKyBuIC0gbGFzdF9pbmRleCwgbSkuYmFjaygpIDw8ICJcbiI7Cgp9CgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGRvV29yaygpOwogICAgfQp9