Please help me find my error, I've tried it yesterday but I am still getting TLE although it is passing all test cases

This is the question : https://www.spoj.com/problems/SPP/

Here is my code:

#include <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;

#define ll long long

ll k;
ll mod;
vector< ll > b,c;


vector<vector<ll>> multiply(vector<vector<ll>>A, vector<vector<ll>>B){
    
    vector<vector<ll>> C(k+2,vector<ll>(k+2));
    for(ll i = 1; i<=k+1; i++){
        for(ll j = 1; j<=k+1; j++){
            for(ll x = 1; x<=k+1; x++){
            C[i][j]=(C[i][j] + (A[i][x]*B[x][j])%mod)%mod;
        }
        }
    }
    return C;
    
}

vector<vector<ll>> power(vector<vector<ll>> A, ll p){
    if(p == 1)
    return A;
    
    else if(p&1){
        return multiply(A,power(A,p-1));
    }
    else{
        vector<vector<ll>>X = power(A,p/2);
        return multiply(X,X);
    }
}


ll compute(ll n){
    
    ll ans = 0;
    //n <= k
    if(n<=k)
    {
        for(ll i = 0; i<n; i++){
            ans=(ans + b[i])%mod;
        }
        return ans%mod;
    }
    
    //Generate Sk
     for(ll i = 0; i<k; i++){
            ans=ans + b[i];
        }
    //creating F1 matrix
    vector<ll> F(k+2);
    
    for(ll i = 2; i<=k+1; i++){
        F[i] = b[i-2];
    }
    F[1] = ans;
    
    //now create transformation matrix
    vector<vector<ll>>T(k+2,vector<ll>(k+2));
    for(ll i = 1; i<=k+1; i++){
           for(ll j = 1; j<=k+1; j++){
               if(i==1){
                   if(j==1)
                   T[i][j] = 1;
                   else
                   T[i][j] = c[k+1-j];
               }
               else if(i==k+1){
                   if(j==1)
                   T[i][j] = 0;
                   else
                   T[i][j] = c[k+1-j];
               }
               else{
                   if(j=i+1)
                   T[i][j] = 1;
                   else
                   T[i][j] = 0;
               }
           }
    }

    
    // now calc T^(n-k)
    T = power(T,n-k);
    
    //now multiply T * F1 's where T's first row is needed
    
    ll result = 0;
    for(ll i = 1; i<=k+1; i++){
        result = (result + (T[1][i]*F[i])%mod)%mod;
    }
    return result%mod;
    
}

int main(){
	
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    //Sn+1 = Sn + an+1
    //an+1 = c1.an + c2. an-1 + ...ck.an-k+1
    
    ll test, n, m, num, p;
    
    cin>>test;
    while(test--){
        cin>>k;
        
        for(ll i = 1; i<=k; i++){
            cin>>num;
            b.push_back(num);
        }
        
        for(ll i = 1; i<=k; i++){
            cin>>num;
            c.push_back(num);
        }
        
        cin>>m>>n;
        cin>>mod;
        ll low = compute(m-1);
        ll high = compute(n);
        
       cout<<((high - low)%mod + mod)%mod<<endl;
        b.clear();
        c.clear();
    }
	
	return 0;
}

Thank you so much in advance.