#include<stdio.h>

int mod(int max,int m);
int del_R(int num,int I,int n,int m,int max,int R[]);
int main()
{
	int n,m,R[500],MAX,max_R,c;
	
	while(1)
	{
		scanf("%d %d",&n,&m);
		if(n==0&&m==0) break;
		MAX=0;
		max_R=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&R[i]);
			MAX+=R[i];
		}
		if(mod(MAX,m)) max_R=n;
		else
		{
			for(int i=1;i<n;i++)//何個引くか i回 引いた個数 I
			{
				int I=0,c;
				c=del_R(i,I,n,m,MAX,R);
				if(c>max_R)
				{
					max_R=c;
					break;
				}
			}
		}
		printf("%d\n",n-max_R);
	}
	return 0;
}

int del_R(int num,int I,int n,int m,int max,int R[])//引く個数=num 引いた個数=I 何種類目 i
{
	int c,max_R=0;
	//全パターン
	for(int i=I;i<n;i++)
	{
		c=mod(max-R[i],m);
		if(num==1)
		{
			if(c==1) return num;
			else continue;
		}
		else if(del_R(num-1,i+1,n,m,max-R[i],R)) return num;
	}
	return max_R;
}

int mod(int max,int m)//戻したのが 1>>割り切れた 0>>余りあり
{
	int judge=1,a=1;
	for(int i=1;i<m;i++) a*=10;
	for(int i=0;i<m;i++)
	{
		if((max/a)%2!=0)
		{
			judge=0;
			break;
		}
		max=max%a;
		a=a/10;
	}
	return judge;
}
