#include <bits/stdc++.h>
using namespace std;
long long min(long long a, long long b) {
  if (a > b)
    return b;
  else
    return a;
}
long long max(long long a, long long b) {
  if (a > b)
    return a;
  else
    return b;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  t = 1;
  while (t--) {
    int n, m;
    cin >> n >> m;
    vector<int> v1[n + 1], v2[n + 1];
    for (int i = 0; i < m; i++) {
      int x, y;
      cin >> x >> y;
      v1[x].push_back(y);
      v2[y].push_back(x);
    }
    int k, d[n + 1];
    for (int i = 0; i < n + 1; i++) d[i] = 0;
    cin >> k;
    int a[k];
    for (int i = 0; i < k; i++) cin >> a[i];
    d[a[k - 1]] = 1;
    queue<int> q;
    q.push(a[k - 1]);
    while (!q.empty()) {
      int x = q.front();
      q.pop();
      for (int i = 0; i < v2[x].size(); i++) {
        if (!d[v2[x][i]]) {
          d[v2[x][i]] = d[x] + 1;
          q.push(v2[x][i]);
        }
      }
    }
    int min1 = 0, max1 = 0;
    for (int i = 0; i < k - 1; i++) {
      if (d[a[i]] < d[a[i + 1]] + 1) min1++;
      for (int j = 0; j < v1[a[i]].size(); j++) {
        if (d[a[i]] == d[v1[a[i]][j]] + 1 && v1[a[i]][j] != a[i + 1]) {
          max1++;
          break;
        }
      }
    }
    cout << min1 << " " << max1 << "\n";
  }
  return 0;
}
