#include <bits/stdc++.h>
using namespace std;
template <class T>
bool umin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool umax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
vector<int> adj[200009], inv[200009];
int arr[200009], dis[200009];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  while (m--) {
    int u, v;
    scanf("%d%d", &u, &v);
    adj[v].push_back(u);
    inv[u].push_back(v);
  }
  int k;
  scanf("%d", &k);
  for (int i = 1; i <= k; i++) scanf("%d", arr + i);
  for (int i = 1; i <= n; i++) dis[i] = 1000000007;
  queue<int> q;
  dis[arr[k]] = 0;
  q.push(arr[k]);
  while (!q.empty()) {
    int nd = q.front();
    q.pop();
    for (__typeof((adj[nd]).begin()) it = (adj[nd]).begin();
         it != (adj[nd]).end(); it++)
      if (umin(dis[*it], dis[nd] + 1)) q.push(*it);
  }
  int a = 0, b = 0;
  for (int i = 1; i < k; i++) {
    int cnt = 0;
    for (__typeof((inv[arr[i]]).begin()) it = (inv[arr[i]]).begin();
         it != (inv[arr[i]]).end(); it++)
      if (dis[arr[i]] == dis[*it] + 1) cnt++;
    if (dis[arr[i]] != dis[arr[i + 1]] + 1)
      b++;
    else
      a += (cnt > 1);
  }
  printf("%d %d\n", b, b + a);
  return 0;
}
