#include<cstdio>
#include<algorithm>
#include<iostream>
#define N 3875000
using namespace std;
int n,m,half,nod,ans;
int k[10],p[10];
int tmp1[N+1],sum1,tmp2[N+1],sum2;
int qm(int a,int q)
{
int b=1;
for(;q;a*=a,q>>=1)
if(q & 1) b*=a;
return b;
}
void dfs(int now,int tot,int *tmp,int & sum)
{
if(now>nod) { tmp[++sum]=tot; return; }
for(int i=1;i<=m;i++) dfs(now+1,tot+k[now]*qm(i,p[now]),tmp,sum);
}
void work()
{
int cnt1,cnt2,j=sum2;
sort(tmp1+1,tmp1+sum1+1);
sort(tmp2+1,tmp2+sum2+1);
for(int i=1;i<=sum1;i++)
{
while(j && tmp1[i]+tmp2[j]>0) --j;
if(!j) break;
if(!(tmp1[i]+tmp2[j]))
{
cnt1=1,cnt2=1;
while(i<sum1 && tmp1[i+1]==tmp1[i]) cnt1++,i++;
while(j>1 && tmp2[j-1]==tmp2[j]) cnt2++,j--;
ans+=cnt1*cnt2;
}
}
}
int main()
{
freopen("equation1.in","r",stdin);
freopen("equation1.out","w",stdout);
scanf("%d%d",&n,&m);
half=n>>1;
for(int i=1;i<=n;i++) scanf("%d%d",&k[i],&p[i]);
nod=half;
dfs(1,0,tmp1,sum1);
nod=n;
dfs(half+1,0,tmp2,sum2);
work();
printf("%d",ans);
}