#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
vector<int> pic[N];
set<int> par[N];
queue<int> que;
bool vis[N];
int path[N], dis[N];
void bfs(int s) {
  while (!que.empty()) que.pop();
  que.push(s);
  vis[s] = 1;
  dis[s] = 0;
  while (!que.empty()) {
    int now = que.front();
    que.pop();
    for (int i = 0; i < pic[now].size(); i++) {
      int t = pic[now][i];
      if (!vis[t]) {
        par[t].insert(now);
        que.push(t);
        vis[t] = 1;
        dis[t] = dis[now] + 1;
      } else if (vis[t] && dis[t] == dis[now] + 1)
        par[t].insert(now);
    }
  }
}
int main() {
  int n, m, k, u, v, minn = 0, maxn = 0;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    pic[v].push_back(u);
  }
  scanf("%d", &k);
  for (int i = 1; i <= k; i++) scanf("%d", &path[i]);
  bfs(path[k]);
  set<int>::iterator it;
  for (int i = 1; i < n; i++) {
    it = par[path[i]].lower_bound(path[i + 1]);
    if (*it == path[i + 1] && par[path[i]].size() > 1)
      maxn++;
    else if (*it != path[i + 1])
      maxn++, minn++;
  }
  printf("%d %d\n", minn, maxn);
  return 0;
}
