#include <bits/stdc++.h>
using namespace std;
unsigned long long inf = (1LL << 62);
long long mod = 1000000007;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long max(long long a, long long b) {
  if (a < b) {
    return b;
  } else
    return a;
}
long long min(long long a, long long b) {
  if (a < b) return a;
  return b;
}
pair<long long, long long> dx[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
vector<pair<long long, long long> > list;
void floyd(int N, long long** d) {
  for (int k = 0; k < (int)(N + 1); k++) {
    for (int i = 0; i < (int)(N + 1); i++) {
      if (d[i + 1][k + 1] == inf) continue;
      for (int j = 0; j < (int)(N + 1); j++) {
        if (d[j + 1][k + 1] == inf) continue;
        d[i + 1][j + 1] =
            min(d[i + 1][j + 1], d[i + 1][k + 1] + d[j + 1][k + 1]);
      }
    }
  }
}
long long vis[100005];
long long d[100005];
vector<pair<long long, long long> > M[100005];
vector<long long> anslist;
void dfs(long long K, long long dist) {
  d[K] = dist;
  vis[K] = 1;
  for (int i = 0; i < M[K].size(); i++) {
    if (vis[M[K][i].first] == 0) {
      dfs(M[K][i].first, dist + M[K][i].second);
    }
  }
}
long long a[10005];
int main() {
  long long N, num_kisuu = 0, num_four = 0;
  cin >> N;
  for (int i = 0; i < (int)(N); i++) {
    cin >> a[i];
    num_kisuu += (a[i] % 2 == 1) ? 1 : 0;
    num_four += (a[i] % 4 == 0) ? 1 : 0;
  }
  long long num_guusuu = N - num_kisuu;
  if (num_four >= num_kisuu)
    cout << "Yes" << endl;
  else if (num_four == num_kisuu - 1 && num_guusuu - num_four == 0)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
  return 0;
}
