func_code_string: #include <bits/stdc++.h>      using namespace std;      typedef long long ll;   typedef long double ld;   #define mems(p) memset(p,-1,sizeof(p))   #define pb push_back   #define eb emplace_back   #define nl   n    #define sz(x) (int)(x).size()   #define all(x) x.begin(), x.end()   #define allr(x) x.rbegin(), x.rend()      using pi = pair<int,int>;   using pl = pair<ll,ll>;   using vi = vector<int>;   using vl = vector<ll>;   using vb = vector<bool>;   using vd = vector<double>;   using vc = vector<char>;   using vpi = vector<pi>;   using vpl = vector<pl>;   using vvi = vector<vector<int>>;   using vvl = vector<vector<ll>>;   using vvb = vector<vector<bool>>;   using vvd = vector<vector<double>>;   using vvc = vector<vector<char>>;   using vvpi = vector<vector<pi>>;   using vvpl = vector<vector<pl>>;   using vvvi = vector<vector<vector<int>>>;   using vvvl = vector<vector<vector<ll>>>;   using vvvb = vector<vector<vector<bool>>>;   using vvvd = vector<vector<vector<double>>>;   using vvvc = vector<vector<vector<char>>>;   using vvvpi = vector<vector<vector<pi>>>;   using vvvpl = vector<vector<vector<pl>>>;      const int mxN = 8e5 + 100;   const ll MOD = 1e9 + 7;      void fast()   {ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);}      ll gcd(ll a, ll b) {       return b ? gcd(b, a%b) : a;   }      vl factorial;      ll expo(ll x, ll exp, ll mod = MOD) {       if (exp <= 0) return 1;       ll tmp = (x*x) % mod;       if (exp%2) {           return (expo(tmp, exp/2, mod) * x) % mod;       }       return (expo(tmp, exp/2, mod)) % mod;   }      ll choice(ll n, ll r, ll mod = MOD) {       if (n < r) return 0;       ll numer = factorial[n];       ll denom = (factorial[r] * factorial[n-r]) % mod;       return numer * expo(denom, mod - 2, mod) % mod;   }      ll phi(ll n) {       ll result = n;       for (ll i = 2; i * i <= n; i++) {           if (n % i == 0) {               while (n % i == 0)                   n /= i;               result -= result / i;           }       }       if (n > 1)           result -= result / n;       return result;   }      ll store[5001][5001];   ll a[5001];   int n;      ll dp(int x, int k) {       if (k == 0) return 1;       if (store[x][k] != -1) return store[x][k];       ll res = 0;       if (x > 0) res += dp(x-1,k-1);       if (x < n - 1) res += dp(x+1,k-1);       if (res >= MOD) res -= MOD;       return store[x][k] = res;   }      int main() {       fast();       int k, q;       cin >> n >> k >> q;       for (int i = 0; i < n; ++i)       {           cin >> a[i];       }       mems(store);       ll ans = 0;       vl sum(n, 0);       for (int i = 0; i < n; ++i)       {           for (int j = 0; j <= k; ++j)           {               sum[i] += dp(i,j)*dp(i,k-j);               sum[i] %= MOD;           }           ans += sum[i]*a[i];           ans %= MOD;       }       //cout <<  init   << ans << nl;          int idx;       ll x;       for (int i = 0; i < q; ++i)       {           cin >> idx >> x;           --idx;           ll chng = x - a[idx];           if (chng < 0) chng += MOD;           ans += chng*sum[idx];           ans %= MOD;           cout << ans << nl;           a[idx] = x;       }   }                              