// Arup Guha
// 4/27/2024
// Solution to CSES Problem: Array Description

import java.util.*;

public class arraydescription {
	
	final public static long MOD = 1000000007L;

	public static void main(String[] args) {
	
		Scanner stdin = new Scanner(System.in);
		int n = stdin.nextInt();
		int m = stdin.nextInt();
		
		// Read values.
		int[] arr = new int[n];
		for (int i=0; i<n; i++)
			arr[i] = stdin.nextInt();
			
		long[][] dp = new long[n][m+1];
		
		// First number can be anything.
		if (arr[0] == 0) {
			for (int j=1; j<=m; j++)
				dp[0][j] = 1;
		}
		
		// First number is set.
		else {
			dp[0][arr[0]] = 1;
		}
		
		// Find answers for ith number.
		for (int i=1; i<n; i++) {
		
			// Case where we can only build off of
			if (arr[i] != 0) {
				
				// This is always safe to build off of.
				dp[i][arr[i]] = (dp[i][arr[i]]+dp[i-1][arr[i]])%MOD;
				
				// Previous number is one lower.
				if (arr[i] > 1) dp[i][arr[i]] = (dp[i][arr[i]]+dp[i-1][arr[i]-1])%MOD;
			
				// Previous number is one higher.
				if (arr[i] < m) dp[i][arr[i]] = (dp[i][arr[i]]+dp[i-1][arr[i]+1])%MOD;
			}
			
			// Current number can be anything!
			else {
			
				for (int j=1; j<=m; j++) {
				
					// Can always build here.
					dp[i][j] = (dp[i][j] + dp[i-1][j])%MOD;
				
					// Previous number is one lower.
					if (j > 1) dp[i][j] = (dp[i][j] + dp[i-1][j-1])%MOD;
					
					// Previous numer is one higher.
					if (j < m) dp[i][j] = (dp[i][j] + dp[i-1][j+1])%MOD;
				}
			
			}
		} // end i.
		
		// Add up all possibilities.
		long res = 0;
		for (int j=1; j<=m; j++)
			res = (res + dp[n-1][j])%MOD;
		System.out.println(res);
	}
}