#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int k[N],p[N];
int cnt1=0,cnt2=0;
int a[N],b[N];
int n,m;
int mid,ans;
inline int Pow(int a,int b)
{
int res=1;
while(b)
{
if(b&1) res*=a;
a*=a;
b>>=1;
}
return res;
}
inline void dfsl(int fine,int all)
{
if(fine == mid )
{
a[++cnt1]=all;
return ;
}
for(int i=1;i<=m;i++)
{
dfsl(fine+1,all+Pow(i,p[fine+1]) * k[fine+1]);
}
}
inline void dfsr(int fine,int all)
{
if(fine == n )
{
b[++cnt2]=all;
return ;
}
for(int i=1;i<=m;i++)
{
dfsl(fine+1,all+Pow(i,p[fine+1]) * k[fine+1]);
}
}
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++)
{
cin >> k[i] >> p[i] ;
}
mid=n/2;
dfsl(0,0);
dfsr(mid,0);
sort(b+1,b+cnt2+1);
for (int i = 1 ; i <= cnt1 ; i++)
{
ans += (upper_bound(b + 1 , b + 1 + cnt2 , -a[i]) - b) - (lower_bound(b + 1 , b + 1 + cnt2 , -a[i]) - b);
}
cout << ans;
return 0;
}