#include <bits/stdc++.h>
using namespace std;
const int INF = 10000000;
long long n, m;
int sx, sy;
int gx, gy;
int qqq;
int d[100][100];
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int ans = 0;
pair<int, int> red[101], blue[101];
long long gcd(long long x, long long y) {
  if (x < y) swap(x, y);
  if (y == 0) return x;
  return gcd(y, x % y);
}
vector<int> prime(int n) {
  vector<int> erst;
  for (int i = 0; i < n; ++i) erst.push_back(i);
  erst[0] = erst[1] = NULL;
  auto dmax = sqrt(n);
  for (int dx = 2; dx < dmax; ++dx) {
    if (erst[dx] == NULL) continue;
    for (int i = dx * 2; i < n; i += dx) erst[i] = NULL;
  }
  vector<int> erstlist;
  for (auto i : erst)
    if (i) erstlist.push_back(i);
  return erstlist;
}
long long v_find(std::vector<long long> vec, long long number) {
  auto itr = std::find(vec.begin(), vec.end(), number);
  size_t index = std::distance(vec.begin(), itr);
  if (index != vec.size()) {
    return 1;
  } else {
    return 0;
  }
}
long long BIG = 10000000000;
long long POW(long long a, long long b) {
  if (b == 0) return 1;
  return (a * POW(a, b - 1)) % BIG;
}
int Kaijou(int a) {
  if (a < 2) return 1;
  return a * Kaijou(a - 1);
}
long long aa[51];
int main() {
  int n;
  cin >> n;
  int a[100000] = {0};
  int t = 1;
  int least = 0;
  int f = 0;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    if (a[i] % 4 == 0) {
      least = 1;
      t++;
    } else if (a[i] % 4 != 2) {
      t--;
    } else {
      if (!f) f = 1;
      if (f == 1) f = 2;
    }
  }
  if (t + least - (f % 2) >= 0)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
  std::cin >> qqq;
  return 0;
}
