#include <bits/stdc++.h>
using namespace std;
vector<long long int> dp(300005, 0);
long long int x = INT_MIN;
int k = 0;
long long int t_sort(vector<long long int> list[], vector<long long int> &arr,
                     int parent, int idex, int flag) {
  dp[idex] = arr[idex];
  for (int i = 0; i < list[idex].size(); i++) {
    int v = list[idex][i];
    if (v != parent) {
      dp[idex] += max(0ll, t_sort(list, arr, idex, v, flag));
    }
  }
  if (!flag) {
    x = max(x, dp[idex]);
  } else {
    if (x == dp[idex]) {
      k++;
      dp[idex] = 0;
    }
  }
  return dp[idex];
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  int n;
  cin >> n;
  vector<long long int> arr(n + 1, 0);
  for (int i = 1; i <= n; i++) cin >> arr[i];
  vector<long long int> list[n + 1];
  long long int a, b, c, d;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    list[a].push_back(b);
    list[b].push_back(a);
  }
  a = t_sort(list, arr, -1, 1, 0);
  a = t_sort(list, arr, -1, 1, 1);
  cout << x * k << " " << k;
}
