SPP - RECURSIVE SEQUENCE (VERSION II)c

one test case is not passing can u provide me code or right logic behind this question here is my code
#include
#include

using namespace std;

#define MAX_SIZE 16
int MOD,size;

struct Matrix{
long long X[MAX_SIZE][MAX_SIZE];

Matrix(){}

void init(){
    memset(X,0,sizeof(X));
    for(int i = 0;i<size;++i) X[i][i] = 1;
}

}aux;

void mult(Matrix &m, Matrix &m1, Matrix &m2){
memset(m.X,0,sizeof(m.X));

for(int i = 0;i<size;++i)
    for(int j = 0;j<size;++j)
        for(int k = 0;k<size;++k)
            m.X[i][k] = (m.X[i][k]+m1.X[i][j]*m2.X[j][k])%MOD;

}

Matrix pow(Matrix &M0, long long n){
Matrix ret;
ret.init();

if(n==0) return ret;
if(n==1) return M0;

Matrix P = M0;

while(n!=0){
    if(n & 1){
        aux = ret;
        mult(ret,aux,P);
    }
    
    n >>= 1;
    
    aux = P;
    mult(P,aux,aux);
}

return ret;

}

int b[15],c[15],sum[15];
Matrix M0,ret;

int getSum(long long n){
if(n<=0) return 0;
if(n<size-1) return sum[n];

ret = pow(M0,n-size+2);

long long ans = ret.X[0][0]*sum[size-2]%MOD;

for(int i = 1;i<size;++i)
    ans = (ans+ret.X[0][i]*b[size-1-i])%MOD;

return (int)ans;

}

int main(){
int T;
long long int n,m;

scanf("%d",&T);

while(T--){
    scanf("%d",&size);
    
    for(int i = 0;i<size;++i) scanf("%d",&b[i]);
    for(int i = 0;i<size;++i) scanf("%d",&c[i]);
    
    scanf("%lld %lld %d",&m,&n,&MOD);
    --m; --n;
    
    for(int i = 0;i<size;++i) b[i] %= MOD;
    
    sum[0] = b[0];
    
    for(int i = 1;i<size;++i){
        sum[i] = sum[i-1]+b[i];
        if(sum[i]>=MOD) sum[i] -= MOD;
    }
    
    ++size;
    
    memset(M0.X,0,sizeof(M0.X));
    
    M0.X[0][0] = 1;
    for(int i = 1;i<size;++i) M0.X[0][i] = M0.X[1][i] = c[i-1];
    for(int i = 2;i<size;++i) M0.X[i][i-1] = 1;
    
    int ans = getSum(n)-getSum(m-1);
    if(ans<0) ans += MOD;
    
    printf("%d\n",ans);
}

return 0;

}