I am trying to implement the following problem using JACOP. Is it possible and if so how best to do it?

Problem:

a subset of 50 x 50 x 20 = 50,000 boolean variables

should equal 1 and the remainder 0:

boolean[50][50][20] selected;

each selected[i][j][k] which is equal to 1

is associated with a utility value:

int[50][50][20] utility;

the goal is to maximize total utility:

maximize Σ(all i,j,k) (selected[i][j][k] * utility[i][j][k])

subject to the constraints that there is AT MOST one selection in

each row, column, and stack:

for each (i, j): Σ(all k) selected[i][j][k] <= 1 for each (j, k): Σ(all i) selected[i][j][k] <= 1 for each (i, k): Σ(all j) selected[i][j][k] <= 1

note, the usage

Σ(all x) K

means the sum of K evaluated at each value of x