#include <fstream>
#include <iostream>
#include <cstdlib>

#define MAXN 100001
#define MOD 1000000007

using namespace std;

long *a, *deg;
long n, m, sol;

void input()
{
	ifstream inFile;
	inFile.open("skupovi.in");
	inFile >> n >> m;
	a = new long [n];
	for (int i = 0; i < n; i++)
		inFile >> a [i];
	inFile.close();
}

int compare (const void *a, const void *b)
{
	return *(long *)a - *(long *)b;
}

void solve()
{
	qsort(a, n, sizeof(long), compare);
	deg = new long [n + 1];
	deg [0] = 1;
	for (int i = 1; i <= n; i++)
	{
		deg [i] = deg [i - 1] * 2;
		if (deg [i] > MOD)
			deg [i] -= MOD;
	}
	sol = 0;

	int left = 0;
	int right = n - 1;
	int count = 0;
	while (right > left)
	{
		if (a [left] + a [right] == m)
		{
			sol = sol + deg [right - left - 1];
			if (sol > MOD)
				sol -= MOD;
			count++;
		}
		if (a [left] + a [right] <= m)
			left++;
		else
			right--;
	}
	if (a [left] + a [right] == m)
	{
		count++;
		sol = sol + 1;
		if (sol > MOD)
			sol -= MOD;
	}
	cout << count << endl;
}

void output()
{
	ofstream outFile;
	outFile.open("skupovi.out");
	outFile << sol << endl;
	outFile.close();
}

int main()
{
	input();
	solve();
	output();
	check();
	return 0;
}
