wrong answer in lebobble

#include<stdio.h>

int main()
{
long int t,i,j,k,m,n,l,d1;
float c;
scanf("%ld",&t);
for(m=0;m<t;m++)
{ c=0.0000;
scanf("%ld%ld",&n,&d1);
long long int a[n],p[n];
for(k=0;k<n;k++)
scanf("%d",&a[k]);
for(l=0;l<n;l++)
scanf("%d",&p[l]);
for(i=0;i<n-1;i++)

			for(j=i+1;j<n;j++)
		{ 
		  
		  if(d1>=0)
		{
		   if((a[i]+d1)<a[j])
		      continue;
	  if(a[i]>(a[j]+d1))
		 {   c=c+1;
				    continue;
				}
		  	
			  if((a[i]+d1)>a[j])
			{
			c=c+((p[i])*(100-p[j]));
	
		
		  }

		  	if(a[i]>a[j])
			{
			c=c+((100-p[i])*(100-p[j]));
		  
	}
		  if(a[i]>(a[j]+d1))
			{
			c=c+((100-p[i])*(p[j]));
		 
		}

		  	if((a[i]+d1)>(a[j]+d1))
			{
			c=c+((p[i])*(p[j]));
		
		
         		        }   
	
	
	
       }
        
		else{
			   if((a[i])<(a[j]+d1))
		      continue;
	  if((a[i]+d1)>(a[j]))
		 {   c=c+1;
				    continue;
				}
		  	
		 if((a[i]+d1)>a[j])
			{
			c=c+((p[i])*(100-p[j]));
	
		
		  }

		  	if(a[i]>a[j])
			{
			c=c+((100-p[i])*(100-p[j]));
		  
	}
		  if(a[i]>(a[j]+d1))
			{
			c=c+((100-p[i])*(p[j]));
		 
		}

		  	if((a[i]+d1)>(a[j]+d1))
			{
			c=c+((p[i])*(p[j]));
		
		
         		        }   
	
	
	
       }
   }

printf("%20.4f\n",c/10000);
}
return 0;