#include <bits/stdc++.h>
using namespace std;
inline int read()
{
char ch=getchar();
int x=0;
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
{
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
int n,c,k;
int sum[101];//差分数组闪亮登场
double f[101][101];//涂i次,变成j的概率
double g[101][101];//共i次,选j次的概率
int main()
{
//freopen("1.out","w",stdout);
int i,j,l,r,m,col;
n=read(),c=read(),k=read();
f[0][1]=1;
for(i=0;i<k;i++)
for(j=0;j<c;j++)
{
if(f[i][j]<=1e-9) continue;
double gailv=f[i][j]/c;
for(col=0;col<c;col++)
f[i+1][j*col%c]+=gailv;
}
g[0][0]=1;
for(i=0;i<k;i++)
for(j=0;j<=i;j++)
{
g[i+1][j]+=g[i][j]/2;
g[i+1][j+1]+=g[i][j]/2;
}
/*for(i=0;i<=k;i++)
{
double tot=0;
for(j=0;j<c;j++)
tot+=f[i][j],printf("%.7lf ",f[i][j]);
cout<<tot<<endl;
}*/
for(i=1;i<=k;i++)
{
l=read(),r=read();
sum[l]++,sum[r+1]--;
}
double ans=0;
int cnt=0;
for(i=1;i<=n;i++)
{
cnt+=sum[i];
for(j=0;j<c;j++)
for(k=0;k<=cnt;k++)
ans+=f[k][j]*g[cnt][k]*j;
}
printf("%.3lf",ans);
}