What wrong in my code.through recursion giving 2 t.c tle.when try with dp giving wrong answer

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

int dp[100][100][100]={-1};
int countsub(int a[],int b[],int i,int j,int n,int m,int count,int k){
if(i==n||j==m){

    return 0;
}
if(dp[i][j][k]!=-1){
    return dp[i][j][k];
}

int t=0;;
if(a[i]==b[j]){
      t=1+(countsub(a,b,i+1,j+1,n,m,count+1,k));
}

else if(k>0){
t=max(t,max(1+countsub(a,b,i+1,j+1,n,m,count+1,k-1),max(countsub(a,b,i+1,j,n,m,count,k),countsub(a,b,i,j+1,n,m,count,k))));
}
else{
t=max(t,max (countsub(a,b,i+1,j,n,m,count,k),countsub(a,b,i,j+1,n,m,count,k)));

    }

dp[i][j][k]=t;
}

int main(){
int n,m,k;
cin>>n>>m>>k;
int a[n];
int b[m];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<m;i++){
cin>>b[i];
}
int count=0;
cout<<countsub(a,b,0,0,n,m,count,k);

}

@dineshjani
Save your code at ide.codingblocks.com and then share link here.