#include <iostream>
using namespace std;
const int maxN=1e5;
const int maxM=100;
const long mod=1e9+7;
typedef long long int ll;
int N, M;
int arr[maxN+5];
ll dp[maxN+5][maxM+1]; // dp[n][m]= 從左開始,第n個數字為m的方法數
// dp[n][m] = dp[n-1][m-1] + dp[n-1][m] + dp[n-1][m+1]
void add(int n,int m){
for(int i=-1;i<=1;i++){
if( 0< m+i and m+i<=M ){
dp[n][m]+=dp[n-1][m+i];
dp[n][m]%=mod;
}
}
}
int main() {
cin>>N>>M;
for(int i=0;i<N;i++)
cin>>arr[i];
for(int i=0;i<N;i++){
for(int j=0;j<=M;j++)
dp[i][j]=0;
}
// first number
if( arr[0]==0 ){
for(int j=1;j<=M;j++)
dp[0][j]=1;
}
else{
dp[0][ arr[0] ]=1;
}
for(int i=1;i<N;i++){
if( arr[i]==0 ){
for(int j=1;j<=M;j++)
add(i,j);
}
else add(i,arr[i]);
}
ll ans=0;
for(int j=1;j<=M;j++){
ans+=dp[N-1][j];
ans%=mod;
}
cout<<ans;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heE49MWU1Owpjb25zdCBpbnQgbWF4TT0xMDA7CmNvbnN0IGxvbmcgbW9kPTFlOSs3Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CmludCBOLCBNOwppbnQgYXJyW21heE4rNV07CmxsIGRwW21heE4rNV1bbWF4TSsxXTsgLy8gZHBbbl1bbV09IOW+nuW3pumWi+Wni++8jOesrG7lgIvmlbjlrZfngrpt55qE5pa55rOV5pW4Ci8vIGRwW25dW21dID0gZHBbbi0xXVttLTFdICsgZHBbbi0xXVttXSArIGRwW24tMV1bbSsxXQoKdm9pZCBhZGQoaW50IG4saW50IG0pewoJZm9yKGludCBpPS0xO2k8PTE7aSsrKXsKCQlpZiggMDwgbStpIGFuZCBtK2k8PU0gKXsKCQkJZHBbbl1bbV0rPWRwW24tMV1bbStpXTsKCQkJZHBbbl1bbV0lPW1vZDsKCQl9CQoJfQp9CgppbnQgbWFpbigpIHsKCWNpbj4+Tj4+TTsKCWZvcihpbnQgaT0wO2k8TjtpKyspCgkJY2luPj5hcnJbaV07Cglmb3IoaW50IGk9MDtpPE47aSsrKXsKCQlmb3IoaW50IGo9MDtqPD1NO2orKykKCQkJZHBbaV1bal09MDsKCX0JCgkKCS8vIGZpcnN0IG51bWJlcgoJaWYoIGFyclswXT09MCApewoJCWZvcihpbnQgaj0xO2o8PU07aisrKQoJCQlkcFswXVtqXT0xOwoJfQoJZWxzZXsKCQlkcFswXVsgYXJyWzBdIF09MTsKCX0KCQoJZm9yKGludCBpPTE7aTxOO2krKyl7CgkJaWYoIGFycltpXT09MCApewoJCQlmb3IoaW50IGo9MTtqPD1NO2orKykKCQkJCWFkZChpLGopOwoJCX0KCQllbHNlIGFkZChpLGFycltpXSk7Cgl9CglsbCBhbnM9MDsKCWZvcihpbnQgaj0xO2o8PU07aisrKXsKCQlhbnMrPWRwW04tMV1bal07CgkJYW5zJT1tb2Q7Cgl9Cgljb3V0PDxhbnM7Cn0=