func_code_string: #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;   }