#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct X
{
    int v,n,f;
}x[1000005],y[1000005];
const int N=1e5+5;
int s,st[N],top,dfn[N],low[N],pa[N],cnt,t,w=-1,q[N],syg[N];
bool vis[N],sf[N];
void add(int u,int v)
{
    y[++s].n=y[u].f;
    y[y[u].f=s].v=v;
}
void dfs(int u)
{
    dfn[u]=low[u]=++s;
    vis[st[++top]=u]=sf[u]=1;
    for(int i=x[u].f;i;i=x[i].n)
        if(!vis[x[i].v]) dfs(x[i].v),low[u]=min(low[x[i].v],low[u]);
        else if(sf[x[i].v]) low[u]=min(low[u],dfn[x[i].v]);
    if(dfn[u]==low[u])
    {
        pa[u]=++cnt;
        for(;st[top]!=u;top--)
            pa[st[top]]=cnt,sf[st[top]]=0;
        top--;sf[u]=0;
    }
}
int main()
{
    int n,m,mod;
    scanf("%d%d%d",&n,&m,&mod);
    for(int i=1;i<=m;i++)
    {
        int u;
        scanf("%d%d",&u,&x[i].v);
        x[i].n=x[u].f;
        x[u].f=i;
    }
    for(int i=1;i<=n;i++)
        if(!vis[i]) dfs(i);
    memset(st,0,sizeof(st));
    memset(dfn,0,sizeof(dfn));
    memset(vis,0,sizeof(vis));
    s=0;
    for(int i=1;i<=n;i++)
    {
        st[pa[i]]++;
        for(int j=x[i].f;j;j=x[j].n)
            if(pa[i]!=pa[x[j].v]) add(pa[i],pa[x[j].v]),++dfn[pa[x[j].v]];
    }
    memset(pa,0,sizeof(pa));
    memset(low,0,sizeof(low));
    for(int i=1;i<=cnt;i++)
        if(!dfn[i]) vis[q[++w]=i]=1,low[i]=1,pa[i]=st[i];
    for(;t<=w;t++)
    {
        for(int i=y[q[t]].f;i;i=y[i].n)
            if(!vis[y[i].v])
            {
                dfn[y[i].v]--;
                if(!dfn[y[i].v]) vis[q[++w]=y[i].v]=1;
                if(syg[y[i].v]==q[t]) continue;
                syg[y[i].v]=q[t];
                if(st[y[i].v]+pa[q[t]]>pa[y[i].v])
                {
                    pa[y[i].v]=pa[q[t]]+st[y[i].v];
                    low[y[i].v]=low[q[t]];
                }
                else if(st[y[i].v]+pa[q[t]]==pa[y[i].v]) low[y[i].v]+=low[q[t]],low[y[i].v]%=mod;
            }
    }
    int ans1=0,ans2;
    for(int i=1;i<=cnt;i++)
        if(ans1<pa[i]) ans1=pa[i],ans2=low[i];
        else if(ans1==pa[i]) ans2+=low[i],ans2%=mod;
    printf("%d\n%d",ans1,ans2);
    return 0;
}