#include<bits/stdc++.h>
using namespace std;
const int N=1e4+100;
int h[N],n,m,MSize;
bool prime(int x)
{
if(x<2) return false;
for(int i=2;i*i<=x;i++)
{
if(x%i==0) return false;
}
return true;
}
int main()
{
int MSize,n,m;
int ans;
scanf("%d%d%d",&MSize,&n,&m);
while(!prime(MSize)) MSize++;
while(n--){
int x;
scanf("%d",&x);
int y=x%MSize;
for(int i=0;;i++)
{
int z=(y+i*i)%MSize;
if(i&&z==y)
{
cout<<x<<" cannot be inserted."<<endl;
break;
}
if(!h[z])
{
h[z]=x;
break;
}
}
}
for(int j=0;j<m;j++)
{
int x,i;
cin>>x;
for(i=0;i<MSize;i++)
{
// 若当前位置存储 x 则找到,若当前位置为空则说明 x 没有被存入
if(h[(x%m+i*i)%m]==x||!h[(x%m+i*i)%m]) break;
}
ans+=i+1;
}
printf("%.1f",ans*1.0/m);
return 0;
}