#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (ll i = 0; i < (n); ++i)
#define REP(i, m, n) for (ll i=(ll)(m); i < (ll)(n); ++i)
#define ln cout<<'\n'
void pr(){ln;}
template<class A, class...B>void pr(const A &a, const B &...b){cout<<a<<' ';pr(b...);}

void solve() {
	int n; cin >> n;
	vector<ll> a(n);
	rep(i, n) cin >> a[i];
	sort(a.begin(), a.end());
	ll ans = 0;
	ll tmp = 0;
	for (int i = 0; i < n; ++i) {
		ans += tmp * a[i];
		ans += a[i] * a[i];
		ans %= 998244353;
		tmp *= 2;
		tmp += a[i];
		tmp %= 998244353;
	}

	cout << ans << endl;
}

int main() {
	ios_base::sync_with_stdio(false), cin.tie(nullptr);
	solve();
	return 0;}

#include <cstdio>
#include <algorithm>
#include <numeric>

using namespace std;

int N,K;

using ll = long long int;

int mat[55][55];
bool o[55][55];//graph
bool comp_set[55][55];
bool visited[55];

const ll MOD=998244353;

ll solve(){
    ll ret=1ll;
    for(int i=1;i<=N;i++){
        ll cnt=1;
        for(int k=1;k<i;k++) if (comp_set[i][k]) cnt++;
        // printf("i=%d cnt=%lld\n",i,cnt);
        ret=ret*cnt%MOD;
    }

    return ret;
}

void DFS(int cur,int root){
    if (visited[cur]) return;
    visited[cur]=true;

    comp_set[cur][root]=comp_set[root][cur]=true;
    for(int v=1;v<=N;v++){
        if (!o[cur][v]||visited[v]) continue;
        DFS(v,root);
    }
}

void set_comp(){
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++) comp_set[i][j]=false;
    for(int v=1;v<=N;v++) {
        DFS(v,v);
        for(int i=1;i<=N;i++) visited[i]=false;
    }
}

void check_compatable(){
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++) o[i][j]=false;
    
    for(int i=1;i<=N;i++) 
        for(int j=1;j<i;j++){
            o[i][j]=true;
            for(int k=1;k<=N;k++) o[i][j]=o[i][j]&&((mat[i][k]+mat[j][k])<=K);
            o[j][i]=o[i][j];
        }
}

int main(){

    scanf("%d%d",&N,&K);

    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++) scanf("%d",&mat[i][j]);
    
    ll ans1,ans2;
    check_compatable();
    set_comp();

    ans1=solve();

    for(int i=1;i<=N;i++)
        for(int j=1;j<=i;j++) swap(mat[i][j],mat[j][i]);

    check_compatable();
    set_comp();

    ans2=solve();

    printf("%lld\n",ans1*ans2%MOD);

    return 0;
}